Эта работа очень хорошо подходит для systemd
.
Запуск сценария как службы systemd
Если ваша система работает под управлением 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
может помочь определить причину сбоя скрипта. Как правило, всегда используйте абсолютные пути для всего, включая echo
или явно определяйте свой $ PATH, добавляя Environment=MYVAR=abc
.