Questo è un lavoro molto adatto per systemd
.
Esecuzione di uno script come servizio systemd
Se il tuo sistema esegue systemd , puoi configurare lo script in modo che venga eseguito come un servizio systemd che fornisca il controllo del ciclo di vita e dell'ambiente di esecuzione, nonché le condizioni preliminari per l'avvio dello script, come ad esempio la rete in esecuzione.
La cartella consigliata per i propri servizi è /etc/systemd/system/
(un'altra opzione è /lib/systemd/system
che normalmente dovrebbe essere utilizzata solo per i servizi OOTB).
Crea il file ad es. Con 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
Ora puoi testare il servizio:
sudo systemctl start autossh
Verifica dello stato del servizio:
systemctl status autossh
Interruzione del servizio:
sudo systemctl stop autossh
Dopo aver verificato che il servizio funziona come previsto, abilitarlo con:
sudo systemctl enable autossh
NOTA: per motivi di sicurezza, systemd
lo script verrà eseguito in un ambiente limitato, in modo simile a come crontab
vengono eseguiti gli script, quindi non fare ipotesi su variabili di sistema preesistenti come $ PATH. Utilizzare le Environment
chiavi se lo script necessita di variabili specifiche da definire. L'aggiunta set -x
nella parte superiore dello script bash e quindi l'esecuzione systemctl status my_service
potrebbe aiutare a identificare il motivo per cui lo script non riesce. Come regola di tumb, usa sempre percorsi assoluti per tutto ciò che include echo
o definisci esplicitamente $ PATH aggiungendo Environment=MYVAR=abc
.