Назад | Перейти на главную страницу

Перезагрузите модуль Systemd после зависимости

У меня есть веб-приложение, которое запускает systemd. Он использует Postgresql в качестве базы данных, поэтому полагается на него. Вот файл модуля моего веб-приложения (я удалил нерелевантные / конфиденциальные части):

[Unit]
Description=xxxx
Requires=postgresql.service
After=network.target postgresql.service

[Service]
Type=simple
PermissionsStartOnly=true
SyslogIdentifier=xx-service
User=yyy
Group=zzz
ExecStart=/opt/.../xx
WorkingDirectory=/opt/xx
StandardOutput=journal+console

[Install]
WantedBy=multi-user.target

Хост-ОС - это сервер Ubuntu 16.04.

У меня недавно было событие, когда утром, когда я вернулся на работу, веб-приложение не работало. После проверки журналов я обнаружил, что служба была остановлена systemd так как postgresql было обновление. По-видимому aptitude остановился postgresql перед обновлением и перезапустил сразу после обновления. Когда я вошел в систему, она работала.

Но systemd решил остановить мое веб-приложение перед остановкой postgresql, что приятно, но не перезапускал веб-приложение после его перезапуска postgresql.

Как проинструктировать systemd перезапустить приложение после postgresql сервис перезапущен?

Я думаю ты ищешь PartOf:

PartOf = Настраивает зависимости аналогично Requires =, но ограничивается остановкой и перезапуском модулей. Когда systemd останавливает или перезапускает перечисленные здесь модули, действие распространяется на этот модуль. Обратите внимание, что это односторонняя зависимость - изменения в этом модуле не влияют на перечисленные модули.

Когда PartOf = b.service используется в a.service, эта зависимость будет отображаться как ConsistsOf = a.service в списке свойств b.service. ConsistsOf = зависимость не может быть указана напрямую.

Добавить PartOf=postgresql.service в файл модуля вашего веб-приложения, перезагрузите systemctl-daemon и тест.

И чтобы решить ситуацию, когда ваше веб-приложение должно будет запускаться автоматически после postgresql.service начинается, вы можете комбинировать PartOf с участием Wants, но в postgresqlфайл модуля:

Хочет = более слабая версия Требует =. Блоки, перечисленные в этой опции, будут запущены, если блок настройки. Однако, если перечисленные единицы не запускаются или не могут быть добавлены к транзакции, это не влияет на действительность транзакции в целом. Это рекомендуемый способ связать запуск одного блока с запуском другого блока.

Обратите внимание, что зависимости этого типа также могут быть настроены вне файла конфигурации модуля путем добавления символических ссылок в каталог .wants /, сопровождающий файл модуля. Подробнее см. Выше.