Я написал программу, использующую базу данных Postgres, и написал для нее файл службы systemd. В настоящее время мой сервис запускается при загрузке просто отлично, и он останавливается, когда Postgres останавливается для обновления (by apt upgrade
). Однако, когда обновление завершено и Postgres запущен снова, моя служба не запускается автоматически.
Могу ли я определить некоторую зависимость для автоматического запуска моего сервиса?
Это состояние моей службы после того, как она автоматически остановилась во время обновления Postgres:
● tabill.service - My service
Loaded: loaded (/srv/tabill/tabill.service; enabled; vendor preset: enabled)
Active: inactive (dead) since Tue 2017-07-04 00:29:24 EEST; 44min ago
Main PID: 1048 (code=killed, signal=TERM)
Обратите внимание, что я могу вручную запустить службу снова просто отлично.
Вот мой сервисный файл:
[Unit]
Description=My service
Wants=nginx.service
Requires=postgresql.service
After=postgresql.service
[Service]
Type=simple
ExecStart=/srv/tabill/app/serve
Restart=always
TimeoutSec=60
[Install]
WantedBy=multi-user.target
Я пытался добавить PartOf=postgresql.service
и BindsTo=postgresql.service
, а затем вручную остановить и запустить Postgres, но ни один не помог.
Конечно, я мог бы удалить Requires
, но остановка обоих сервисов предпочтительнее, если только они оба начнут резервное копирование.
Requires=
удаленным, это не помогло. Я думаю, что проблема в том, что PartOf=
ссылки «остановка и перезапуск модулей», но Postgres не перезапускается во время обновления. Он остановлен, обновлен и запущен.
systemctl restart postgresql
, systemd не забывает перезапускать зависимые сервисы снова. Похоже, что apt по какой-то причине делает комбинацию stop
и start
вместо restart
.
PartOf=
звучит как правильное решение. Вы пробовали это сRequires=
удаленным?