Я написав програму, яка використовує базу даних 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=видаленим?