Jest to praca bardzo dobrze dostosowana systemd
.
Uruchamianie skryptu jako usługi systemowej
Jeśli system działa systemd , możesz skonfigurować skrypt, aby działał jako usługa systemd, która zapewnia kontrolę nad cyklem życia i środowiskiem wykonawczym, a także warunki wstępne uruchomienia skryptu, takie jak sieć działająca.
Zalecanym folderem dla własnych usług jest /etc/systemd/system/
(inna opcja jest /lib/systemd/system
taka, ale zwykle powinna być używana tylko dla usług OOTB).
Utwórz plik np. Za pomocą 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
Teraz możesz przetestować usługę:
sudo systemctl start autossh
Sprawdzanie statusu usługi:
systemctl status autossh
Zatrzymywanie usługi:
sudo systemctl stop autossh
Po sprawdzeniu, że usługa działa zgodnie z oczekiwaniami, włącz ją za pomocą:
sudo systemctl enable autossh
UWAGA: Ze względów bezpieczeństwa systemd
skrypt będzie uruchamiany w ograniczonym środowisku, podobnie do sposobu crontab
uruchamiania skryptów, dlatego nie przyjmuj żadnych założeń dotyczących wcześniej istniejących zmiennych systemowych, takich jak $ PATH. Użyj Environment
klawiszy, jeśli skrypt wymaga zdefiniowania określonych zmiennych. Dodanie set -x
u góry skryptu bash, a następnie uruchomienie systemctl status my_service
może pomóc w określeniu przyczyny niepowodzenia skryptu. Z reguły tumb, zawsze używaj ścieżek bezwzględnych do wszystkiego, w tym echo
lub jawnie zdefiniuj swoją $ PATH poprzez dodanie Environment=MYVAR=abc
.