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.
FailureActiontoma los mismos valores que StartLimitAction, y todos excepto nonedesencadenar un cierre de algún tipo.
Restarty envolvermy_cmdasí:ExecStart=/bin/sh -c 'while ! my_cmd; do sleep 1; done'junto con unTimeoutStartSecvalor razonable .