J'ai écrit un programme qui utilise une base de données Postgres et j'ai écrit un fichier de service systemd pour cela. Actuellement, mon service démarre très bien au démarrage, et il est arrêté lorsque Postgres est arrêté pour la mise à niveau (par apt upgrade
). Cependant, une fois la mise à niveau terminée et Postgres redémarré, mon service n'est pas démarré automatiquement.
Puis-je définir une certaine dépendance pour redémarrer automatiquement mon service?
Voici l'état de mon service après son arrêt automatique lors de la mise à niveau de 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)
Notez que je peux redémarrer manuellement le service très bien.
Voici mon dossier de service:
[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
J'ai essayé d'ajouter PartOf=postgresql.service
et BindsTo=postgresql.service
, puis d'arrêter et de démarrer manuellement Postgres, mais aucun n'a aidé.
Bien sûr, je pourrais supprimer le Requires
, mais arrêter les deux services ensemble est préférable, si seulement ils redémarraient tous les deux.
Requires=
supprimé, cela n'a pas aidé. Je pense que le problème est que les PartOf=
liens "arrêt et redémarrage des unités", mais Postgres n'est pas redémarré lors d'une mise à niveau. Il est arrêté, mis à niveau et démarré.
systemctl restart postgresql
, systemd se souvient de redémarrer à nouveau ses services dépendants. Il semble qu'apt, pour une raison quelconque, fasse une combinaison de stop
et start
au lieu de restart
.
PartOf=
sonne comme la bonne solution. L'avez-vous essayé avecRequires=
supprimé?