J'ai un problème vraiment étrange avec systemd
. Lorsque j'émets un, systemctl restart
il démarre le nouveau processus avant la fin du précédent.
Cela peut être vu dans le journal, où le message d'arrêt final ("journal de fermeture") est enregistré après le message de démarrage ("journal d'ouverture").
Existe-t-il un moyen d'ajouter un délai entre l'arrêt et le début du processus?
systemctl stop myservice && sleep 3 && systemctl start myservice
Réponses:
Dans vos fichiers de service systemd, vous pouvez définir l'option RestartSec pour ajouter un délai de redémarrage. Voir l'exemple ci-dessous:
Consultez ce lien pour plus d'exemples.
la source
RestartSec
ne s'applique qu'aux services configurés avec laRestart=
directive et n'est pas pris en compte lors d'unsystemctl restart someservice
RestartSec ne semble être utilisé que si ce service particulier est celui qui est redémarré via la commande systemctl restart.
Par exemple, j'ai deux services, A et B.
et
Si vous effectuez un redémarrage systemctl B, cela fonctionne comme prévu ... mais si vous effectuez un redémarrage systemctl A, les deux services sont arrêtés et redémarrés immédiatement, sans délai.
Systemd n'utilise apparemment que les valeurs de configuration pour le seul service que vous spécifiez et les ignore pour toutes les dépendances.
Ce n'est pas aussi rare qu'il y paraît. Si B communique avec un serveur distant, le démarrage et l'arrêt rapides peuvent échouer car l'extrémité distante rejette le client. Mais le redémarrage direct de A se produira chaque fois que A est mis à jour sans modification de B.
Vous pouvez probablement contourner cela en ajoutant également le retard à A, mais vous ne devriez pas BESOIN de le faire, car cela rompt l'isolement des objets en faisant connaître A à B quand ce n'est pas une dépendance.
la source