bash скрипт в качестве сервиса linux
За основу взята статьи о systemd и bash:
https://linux-notes.org/pishem-systemd-unit-fajl/
https://habr.com/ru/company/ruvds/blog/326826/
Запуск не завершающегося простого bash скрипта
Напишем небольшой скрипт, проверяющий доступность сайта https://vlad.krasnodar-it-service.ru:
1 2 3 4 5 6 7 8 9 | #!/bin/bash while true; do nc vlad.krasnodar-it-service.ru 80 if [ $? -ne 0 ] ; then echo "Port is close" fi sleep 20 done |
Создадим юнит-файл watchdog.service в /etc/systemd/system
1 2 3 4 5 6 7 8 9 10 | [Unit] Description=Watchdog After=network.target [Service] Type=simple ExecStart=/opt/watchdog/watchdog.sh [Install] WantedBy=multi-user.target |
Так как скрипт взаимодействует с сетью, то ждем запуска сетевых сервисов network.target
ExecStart — абсолютный путь к скрипту
Лог скрипта будет отображаться в логах syslog, в debian это файл /var/log/syslog
После чего перечитываем unit-файлы и запускаем сервис:
1 2 3 | systemctl daemon-reload systemctl start watchdog.service systemctl enable watchdog.service |
Запуск завершающихся bash-скриптов
Создадим два скрипта, первый будет запускать проигрывание мелодии запуска
1 2 3 4 5 6 7 8 9 10 11 12 | cat startup.sh #!/bin/sh TITLE='Startup' DESCRIPTION='' SOURCE='https://wiki.ubuntuusers.de/Soundausgabe_Systemlautsprecher' beep -f165.4064 -l100 \ -n -f130.813 -l100 \ -n -f261.626 -l100 \ -n -f523.251 -l100 \ -n -f1046.50 -l100 \ -n -f2093.00 -l100 \ -n -f4186.01 -l100 |
, а второй завершения:
1 2 3 4 5 6 7 8 9 | cat shutdow.sh #!/bin/sh TITLE='Shutdown' DESCRIPTION='' SOURCE='https://wiki.ubuntuusers.de/Soundausgabe_Systemlautsprecher' beep -f523.251 -l100 -D100 \ -n -f391.995 -l100 -D100 \ -n -f329.628 -l100 -D100 \ -n -f261.626 -l200 |
Для работы сервиса создаем unit-файл beep.service в /etc/systemd/system:
1 2 3 4 5 6 7 8 9 10 11 | [Unit] Description=Beep Service [Service] Type=simple ExecStart=/opt/sound/startup.sh ExecStop=/opt/sound/shutdown.sh RemainAfterExit=yes [Install] WantedBy=multi-user.target |
Указываем абсолютный путь к скрипту включения ExecStart
и выключения ExecStop
Директива RemainAfterExit — указывает что сервис является активным не смотря что процесс завершился.
1 2 3 | systemctl daemon-reload systemctl start beep.service systemctl enable beep.servcie |
Теперь при запуске и выключении системы будут проигрываться две мелодии.