служба systemd запускается до и после запуска другой службы - PullRequest
0 голосов
/ 23 февраля 2020

Я хочу запустить скрипт до и после запуска autofs. У меня есть две службы systemd:

backup1.service запускается до autofs

[Unit]
Description=Backup mount

[Service]
ExecStart=/backup/sw/bmount before


[Install]
WantedBy=autofs.service

backup2.service запускается после autofs

[Unit]
Description=Backup mount
PartOf=autofs.service
After=autofs.service

[Service]
ExecStart=/backup/sw/bmount after

[Install]
WantedBy=autofs.service

Я могу определить состояние после / до в сценарии bmount, поэтому я могу вызывать его без параметров и использовать только один сервис, но не знаю как.

Возможно ли это?

1 Ответ

0 голосов
/ 24 февраля 2020

Есть несколько способов сделать это:

Редактировать autofs.service

По своему дизайну сервисные файлы должны обслуживаться сайтом. На платформах на основе Debian файлы сервисов, предоставляемых вендором, находятся в /lib/systemd/system/, я думаю, что у redhat они есть в /usr/lib/systemd/system/, но вы можете переопределить их с файлами сервисов, управляемых сайтом, в /etc/systemd/system/.

В этом случае я бы

cp /lib/systemd/system/autofs.service /etc/systemd/system/autofs.service

Затем в разделе [Service] я бы добавил:

ExecStartPre=/backup/sw/bmount before
ExecStartPost=/backup/sw/bmount after

На странице управления systemd.service написано :

ExecStart = команды выполняются только после успешного завершения всех команд ExecStartPre =.

ExecStartPost = команды выполняются только после успешного вызова команд, указанных в ExecStart =, как определено по типу = (т. е. процесс был запущен для типа = простой или тип = бездействующий, последний процесс ExecStart = успешно завершен для типа = однократный выстрел, ...).

Параметры службы вставки

Более элегантный способ сделать то же самое, что и выше, это использовать раскрывающийся список. Просто создайте /etc/systemd/system/autofs.service.d/backup.conf с этим содержимым:

[Service]
ExecStartPre=/backup/sw/bmount before
ExecStartPost=/backup/sw/bmount after

Отношения

Может быть, autofs.service уже имеет команды ExecStartPre и ExecStartPost, и вы беспокоитесь о возможности вмешательства в эту службу. В этом случае вы можете использовать отношения для запуска / остановки ваших услуг.

[Unit]
Description=Backup mount
PartOf=autofs.service
Before=autofs.service

[Service]
Type=oneshot
ExecStart=/backup/sw/bmount before

[Install]
WantedBy=autofs.service

и


[Unit]
Description=Backup mount
PartOf=autofs.service
After=autofs.service

[Service]
Type=oneshot
ExecStart=/backup/sw/bmount after

[Install]
WantedBy=autofs.service

В этом случае:

  • PartOf=autofs.service означает «Когда systemd останавливается или перезапускается autofs.service, действие распространяется на backup.service»
  • Before=autofs.service означает «Если оба модуля запускаются, запуск autofs.service задерживается до backup.service запуск завершен. "
  • After=autofs.service означает" Если оба блока запускаются, запуск backup.service задерживается до завершения autofs.service. "
  • WantedBy=autofs.service означает "backup.service будет запущено, если autofs.service будет".
  • Type=oneshot означает, что служба будет по-прежнему считаться работающей, даже после завершения процесса ExecStart=.

Обязательно запустите systemctl daemon-reload, чтобы systemd прочитал новый служба. Также запустите systemctl enable backup.service, чтобы WantedBy= стал Wants= для autofs.service.

Я думаю, вы были довольно близки с вашим решением.

...