Bu çok uygun bir iş systemd
.
Bir betiği systemd hizmeti olarak çalıştırma
Sisteminiz systemd çalıştırıyorsa , komut dosyanızı yaşam döngüsü ve yürütme ortamı üzerinde denetim sağlayan bir sistemd hizmeti olarak ve ayrıca ağın çalışır durumda olması gibi komut dosyasının başlatılması için ön koşullar sağlayacak şekilde yapılandırabilirsiniz.
Kendi hizmetleriniz için önerilen klasör /etc/systemd/system/
(başka bir seçenek /lib/systemd/system
ancak normalde yalnızca OOTB hizmetleri için kullanılmalıdır).
Dosyayı şu şekilde oluşturun 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
Şimdi hizmeti test edebilirsiniz:
sudo systemctl start autossh
Hizmetin durumunu kontrol etme:
systemctl status autossh
Hizmetin durdurulması:
sudo systemctl stop autossh
Hizmetin beklendiği gibi çalıştığını doğruladıktan sonra aşağıdakileri etkinleştirin:
sudo systemctl enable autossh
NOT: Güvenlik amacıyla systemd
komut dosyası, komut crontab
dosyalarının çalışma biçimine benzer şekilde kısıtlı bir ortamda çalıştırılır, bu nedenle $ PATH gibi önceden var olan sistem değişkenleri hakkında herhangi bir varsayımda bulunmayın. Environment
Komut dosyanızın tanımlanması için belirli değişkenlere ihtiyacı varsa tuşları kullanın . set -x
Bh komut dosyanızın üstüne ekleme ve ardından çalıştırma systemctl status my_service
, komut dosyanızın neden başarısız olduğunu belirlemeye yardımcı olabilir. Bir yuvarlanma kuralı olarak, her şey için her zaman mutlak yollar kullanın echo
veya ekleyerek $ PATH'inizi açıkça tanımlayın Environment=MYVAR=abc
.