Я написав програму, яка використовує базу даних Postgres, і я написав файл системного сервісу для неї. Наразі мій сервіс починає завантажуватися просто чудово, і він зупиняється, коли 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 запам'ятовує знову запустити свої залежні служби. Здається, що влучна чомусь робить комбінацію stop
і start
замість цього restart
.
PartOf=
звучить як правильне рішення. Ви спробували це зRequires=
видаленим?