Ця робота дуже добре підходить 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
.