Средство systemd заменяет более старые скрипты инициализации System-V предыдущих выпусков.
Systemd — это управляемое событиями сущность, которое позволяет независимым подсистемам запускаться, управляться или останавливаться параллельно.
В этой статье мы объясним, как добавить собственный скрипт в systemd.
1. Написание и отладка пользовательского скрипта
Обычно скрипт systemd пишется как скрипт шелла.
Начните с написания собственного скрипта, используя обычные опции.
Мы назовем наш скрипт my-custom-script.sh и это будет просто вывод надписи:
#!/bin/sh echo I am a custom script
2. Скрипт должен быть исполняемым
Давайте сделаем скрипт исполняемым:
# chmod 0755 my-custom-script.sh
3. Опишите пользовательский скрипт для systemd
Скрипт готов к описанию в системе systemd.
Для этого нужен файл [name] .service.
Синтаксис использует формат INI, обычно используемый для файлов конфигурации.
Продолжая наш пример, нам нужен файл my-custom-script.service.
Исполняемый файл будет запускаться ровно один раз при каждом запуске службы.
Служба не будет запущена, пока сетевой уровень не станет стабильным:
# This is my-custom-script.service, which describes the my-custom-script.sh file [Unit] Description=This is executed on shutdown or reboot DefaultDependencies=no Wants=network-pre.target # (if network is required before running the script) Before=network-pre.target shutdown.target reboot.target halt.target # Defines the order in which units are stoped. #(REQUIRED) [Service] Type=oneshot # enables specifying multiple custom commands that are then executed sequentially. (REQUIRED) RemainAfterExit=true # required by the oneshot setting (REQUIRED) Environment=ONE='one' "TWO='2" # you can set some environment variables, that may be necessary to pass as arguments ExecStart=/bin/true # because is a shutdown script nothing is done when this service is started ExecStop=/bin/bash /usr/local/bin/my-custom-script.sh ${ONE} ${TWO} # < --*********** change to the script full path ************ (REQUIRED) TimeoutStopSec=1min 35s # Configures the time to wait for stop. [Install] WantedBy=multi-user.target # When this unit is enabled, the units listed in WantedBy gain a Want dependency on the unit. (REQUIRED)
4. Поместите файл сервиса в каталог
Давайте поместим пользовательский скрипт в каталог сервисов, т.е. в /etc/systemd/system/:
# cp my-custom-script.sh /etc/systemd/system/
5. Включите скрипт для работы при ребуте
Подобно chkconfig из более ранних версий, служба должна быть включена.
Поскольку была добавлена новая служба, уведомите демон systemd о необходимости перенастройки:
# systemctl enable my-custom-script.service # systemctl daemon-reload