Systemd — запуск bash-скрипта

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

Теперь при запуске и выключении системы будут проигрываться две мелодии.

Добавить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.