У меня есть две службы systemd: postgresql.service
и app.service
. postgresql.service
предоставляется дистрибутив (ubuntu 15.10) и app.service
написано мной.
поскольку app
потребности postgresql
, сервис выглядит так:
[Unit]
Description=Start App
Requires=postgresql.service
After=postgresql.service
[Install]
WantedBy=multi-user.target
[Service]
Restart=always
ExecStart=/path/to/app
Сегодня обновился postgresql. Конечно, он перезапустил postgresql.service
после обновления автоматически. Но это убило мою app.service
, потому что это требует postgresql
:
# systemctl status app
[...]
Apr 08 12:04:42 host systemd[1]: Stopping Start App...
Apr 08 12:04:42 host systemd[1]: Stopped Start App.
Apr 08 12:04:42
время, когда обновление postgresql
получилось.
Как я могу изменить app.service
чтобы его просто не убили, когда postgresql
перезапускается, но (повторно) запускается автоматически (конечно, только когда он включен)?
Или спросить по-другому: как я могу настроить app.service
что он всегда автоматически запускается после postgresql.service
когда app.service
включен? Так что в основном systemctl start postgresql
первые старты postgresql
а затем автоматически app
.
Я думаю, что systemd хочет, чтобы я использовал Wants
вместо того Requires
. Из руководства:
Требуется =
Настраивает зависимости требований от других модулей. Если этот отряд активируется, перечисленные здесь юниты также будут активированы. Если один из других блоков будет деактивирован или его активация не удастся, это устройство будет деактивировано. [...] Часто лучше использовать Wants = вместо Requires =, чтобы получить более надежную систему при работе с неисправными службами.
Теперь используя Wants
и это похоже на то, что я действительно хочу иметь надежную систему, работающую с отказавшими службами. Так и делаю.
Вы могли бы добавить postgresql.service
к вашим услугам WantedBy
[Unit]
Description=Start App
Requires=postgresql.service
After=postgresql.service
[Install]
WantedBy=multi-user.target postgresql.service
[Service]
Restart=always
ExecStart=/path/to/app
не забывай systemctl reenable app.service
после systemctl daemon-reload
чтобы позволить systemd создать новую символическую ссылку