이것은 매우 적합한 직업입니다 systemd
.
시스템 서비스로 스크립트 실행
시스템에서 systemd를 실행중인 경우 수명주기 및 실행 환경을 제어하고 네트워크 시작 및 실행과 같은 스크립트 시작을위한 사전 조건을 제공하는 시스템 서비스로 실행되도록 스크립트를 구성 할 수 있습니다.
자신의 서비스에 권장되는 폴더는 /etc/systemd/system/
다른 옵션 /lib/systemd/system
이지만 일반적으로 OOTB 서비스에만 사용되어야합니다.
예를 들어 다음과 같이 파일을 작성하십시오 sudo vim /etc/systemd/system/autossh.service
.
[Unit]
# By default 'simple' is used, see also https://www.freedesktop.org/software/systemd/man/systemd.service.html#Type=
# Type=simple|forking|oneshot|dbus|notify|idle
Description=Autossh keepalive daemon
## make sure we only start the service after network is up
Wants=network-online.target
After=network.target
[Service]
## here we can set custom environment variables
Environment=AUTOSSH_GATETIME=0
Environment=AUTOSSH_PORT=0
ExecStart=/usr/local/bin/ssh-keep-alive.sh
ExecStop=pkill -9 autossh
# don't use 'nobody' if your script needs to access user files
# (if User is not set the service will run as root)
#User=nobody
# Useful during debugging; remove it once the service is working
StandardOutput=console
[Install]
WantedBy=multi-user.target
이제 서비스를 테스트 할 수 있습니다 :
sudo systemctl start autossh
서비스 상태 확인 :
systemctl status autossh
서비스 중지
sudo systemctl stop autossh
서비스가 예상대로 작동하는지 확인한 후 다음을 사용하여 활성화하십시오.
sudo systemctl enable autossh
참고 : 보안을 위해 스크립트가 실행 systemd
되는 방식과 유사하게 제한된 환경에서 crontab
스크립트를 실행하므로 $ PATH와 같은 기존 시스템 변수에 대해 가정하지 마십시오. Environment
스크립트에 특정 변수를 정의해야하는 경우 키를 사용하십시오 . set -x
bash 스크립트 맨 위에 추가 한 다음 실행 systemctl status my_service
하면 스크립트가 실패한 이유를 식별하는 데 도움이 될 수 있습니다. tumb의 원칙으로 항상을 포함하여 모든 것에 절대 경로 를 사용하거나을 echo
추가하여 $ PATH를 명시 적으로 정의하십시오 Environment=MYVAR=abc
.