Как запустить службу Systemd после завершения работы другой службы

Убунту 16

Systemd — это системный и сервисный менеджер для операционных систем Linux. Он разработан с учетом обратной совместимости со сценариями инициализации SysV и предоставляет ряд функций, таких как параллельный запуск системных служб во время загрузки, активация демонов по требованию или логика управления службами на основе зависимостей. В этой статье мы обсудим, как запустить службу systemd после завершения работы другой службы.

Чтобы запустить службу systemd после завершения работы другой службы, вы можете использовать директиву After в файле модуля службы. Это гарантирует, что вторая служба не запустится, пока не завершится первая служба. Указав порядок выполнения, вы можете легко управлять зависимостями между службами в systemd.

Понимание системных служб

Прежде чем мы углубимся, важно понять, что такое служба systemd. По сути, служба — это сценарий, который выполняется процессом systemd. Сценарий может представлять собой любой исполняемый файл и обычно содержит команды для запуска или остановки определенного процесса.

Каждая служба в systemd определяется файлом модуля службы. Эти файлы хранятся в /etc/systemd/system и определяют поведение службы. Файл сервисного модуля разделен на разделы. Каждый раздел начинается с заголовка раздела, например [Unit], [Service]или [Install]и включает в себя различные директивы, определяющие поведение службы.

Создание службы Systemd

Начнем с создания простого сервиса. Сначала мы назовем его сервисом. Вот как может выглядеть файл сервисного модуля first.service:

[Unit]

Описание=Первая из двух услуг

[Service]
ExecStart=/path/to/your/script.sh Type=oneshot

[Install]
WantedBy=multi-user.target

в [Service] В разделе директива ExecStart используется для указания команды, которая будет выполняться при запуске службы. В данном случае это сценарий оболочки, расположенный по адресу /path/to/your/script.sh.

Директива Type имеет значение oneshot. Это значит, что systemd посчитает службу активной только после выполнения всего скрипта. Если эта директива не установлена, systemd будет считать службу активной, как только скрипт начнет выполнение.

[Install] Этот раздел используется для определения момента запуска службы. Директива WantedBy используется для указания цели, частью которой должна быть служба. В данном случае это multi-user.target, который является общей целью для служб, которые должны быть доступны после завершения процесса загрузки.

Запуск службы после другой службы

Теперь предположим, что у нас есть еще одна служба, Second.service, которую мы хотим запустить только после завершения работы first.service. Вот как может выглядеть файл сервисного модуля для Second.service:

[Unit]

Описание=Второй из двух сервисов After=first.service

[Service]
ExecStart=/путь/к/вашему/второму_скрипту.sh Тип=oneshot

[Install]
WantedBy=multi-user.target

Директива After в [Unit] раздел используется для указания того, что второй.сервис должен запускаться после первого.сервиса. Это гарантирует, что второй.сервис не запустится, пока не завершится первый.сервис.

Проверка порядка выполнения

Вы можете проверить порядок выполнения, проверив журнал systemd:

журналctl -u первый.сервис -u второй.сервис

Эта команда отобразит журналы для first.service и Second.service. Вы должны увидеть, что first.service завершается до запуска Second.service.

Заключение

В этой статье мы обсудили, как запустить службу systemd после завершения работы другой службы. Этого можно добиться, используя директиву Type=oneshot в файле модуля службы и директиву After, чтобы указать порядок выполнения. Эта функция systemd может быть очень полезна в сценариях, где одна служба зависит от завершения другой службы.

Вы можете проверить статус службы systemd, используя статус systemctl. [service-name] команда. Будет отображена информация о службе, включая ее текущее состояние и все недавние журналы.

Чтобы запустить службу systemd, вы можете использовать команду systemctl start. [service-name] команда. Это инициирует выполнение службы и переведет ее в активное состояние.

Чтобы остановить службу systemd, вы можете использовать команду systemctl stop. [service-name] команда. Это остановит выполнение службы и переведет ее в неактивное состояние.

Вы можете включить автоматический запуск службы systemd при загрузке, используя systemctl Enable. [service-name] команда. Это создаст необходимые символические ссылки для включения службы в соответствующую цель, гарантируя ее запуск во время процесса загрузки.

Чтобы отключить автоматический запуск службы systemd при загрузке, вы можете использовать команду systemctl [service-name] команда. Это удалит символические ссылки, связанные со службой, из соответствующей цели, предотвращая ее запуск во время процесса загрузки.

Вы можете перезагрузить конфигурацию службы systemd, используя systemctl reload. [service-name] команда. Это даст указание службе перезагрузить файлы конфигурации, не прерывая ее выполнение.

Чтобы перезапустить службу systemd, вы можете использовать команду systemctl restart. [service-name] команда. Это остановит службу, если она запущена, а затем запустит ее снова, фактически перезапустив службу.

Вы можете просмотреть журналы службы systemd, используя журналctl -u [service-name] команда. При этом отобразятся журналы, относящиеся к указанной службе, что позволит вам устранять любые проблемы или отслеживать ее активность.

Чтобы просмотреть зависимости службы systemd, вы можете использовать список зависимостей systemctl. [service-name] команда. Это покажет список других служб, от которых зависит указанная служба или которые зависят от нее.

Перезапускать сам процесс systemd не рекомендуется, так как это потенциально может нарушить работу всей системы. Вместо этого рекомендуется перезапустить определенные службы с помощью команды systemctl restart. [service-name] команда.

Похожие записи

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *