He leído la página de manual del servicio systemd varias veces, pero aún no puedo entender un patrón básico de systemd:
Quiero ejecutar un proceso de inicio una vez (como un contenedor acoplable o formatear una unidad) en el arranque, con éxito hasta su finalización. Pero si uso Type = oneshot para eso, entonces no puedo usar Restart = on-failure, y si falla, no volverá a intentar el trabajo. ¿Me estoy perdiendo algo obvio aquí?
También intenté configurar Type = simple con Restart = on-failure, pero en muchos casos necesito el siguiente comportamiento (de la página de manual) que ofrecen los servicios de onehot:
El comportamiento de oneshot es similar a simple; sin embargo, se espera que el proceso tenga que salir antes de que systemd comience las unidades de seguimiento.
Actualizaciones:
Restart=
estableciendo FailureAction=[self.unit]
(reemplace [self.unit] con el nombre de la unidad). Es algo hacky, pero al menos explícito y fácil de seguir.
FailureAction
toma los mismos valores que StartLimitAction
, y todos excepto none
desencadenar un cierre de algún tipo.
Restart
y envolvermy_cmd
así:ExecStart=/bin/sh -c 'while ! my_cmd; do sleep 1; done'
junto con unTimeoutStartSec
valor razonable .