У меня есть веб-приложение, которое запускает 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 /, сопровождающий файл модуля. Подробнее см. Выше.