J'ai lu la page de manuel du service systemd à quelques reprises, mais je n'arrive toujours pas à comprendre un modèle de base systemd:
Je veux exécuter un processus de démarrage une fois (comme un conteneur Docker ou formater un lecteur) au démarrage, avec succès jusqu'à la fin. Mais si j'utilise Type = oneshot pour cela, je ne peux pas utiliser Restart = en cas d'échec, et s'il échoue, il ne recommencera pas le travail. Suis-je en train de manquer quelque chose d'évident ici?
J'ai également essayé de définir Type = simple avec Restart = on-failure, mais cela dans de nombreux cas, j'ai besoin du comportement suivant (à partir de la page de manuel) que les services oneshot donnent:
Le comportement de one-shot est similaire à simple; cependant, il est prévu que le processus doit se terminer avant que systemd ne démarre les unités de suivi.
Mises à jour:
Restart=
définissant FailureAction=[self.unit]
(remplacer [self.unit] par le nom de l'unité). C'est un peu hacky, mais au moins explicite et assez facile à suivre.
FailureAction
prend les mêmes valeurs que StartLimitAction
, et tous sauf none
déclencher un arrêt quelconque.
Restart
et à bouclermy_cmd
comme ceciExecStart=/bin/sh -c 'while ! my_cmd; do sleep 1; done'
:, avec uneTimeoutStartSec
valeur raisonnable .