Dies ist ein Job, für den er sehr gut geeignet ist systemd
.
Ausführen eines Skripts als systemd-Dienst
Wenn auf Ihrem System systemd ausgeführt wird , können Sie Ihr Skript so konfigurieren, dass es als systemd-Dienst ausgeführt wird, der die Kontrolle über die Lebenszyklus- und Ausführungsumgebung sowie die Voraussetzungen für den Start des Skripts bietet, z. B., dass das Netzwerk aktiv ist.
Der empfohlene Ordner für Ihre eigenen Dienste ist /etc/systemd/system/
(eine andere Option ist /lib/systemd/system
jedoch, dass diese normalerweise nur für OOTB-Dienste verwendet werden sollte).
Erstellen Sie die Datei zB mit 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
Jetzt können Sie den Service testen:
sudo systemctl start autossh
Überprüfen des Status des Dienstes:
systemctl status autossh
Beenden des Dienstes:
sudo systemctl stop autossh
Sobald Sie überprüft haben, dass der Dienst wie erwartet funktioniert, aktivieren Sie ihn mit:
sudo systemctl enable autossh
ANMERKUNG: Aus Sicherheitsgründen systemd
wird das Skript in einer eingeschränkten Umgebung ausgeführt, ähnlich wie crontab
Skripte ausgeführt werden. Nehmen Sie daher keine Annahmen über bereits vorhandene Systemvariablen wie $ PATH vor. Verwenden Sie die Environment
Tasten, wenn für Ihr Skript bestimmte Variablen definiert werden müssen. Wenn set -x
Sie das Bash-Skript oben hinzufügen und dann ausführen, können Sie systemctl status my_service
möglicherweise feststellen, warum das Skript fehlschlägt. Verwenden Sie in der Regel immer absolute Pfade für alles, einschließlich echo
, oder definieren Sie Ihren $ PATH explizit, indem Sie hinzufügen Environment=MYVAR=abc
.