Ho letto alcune volte la manpage del servizio systemd, ma non riesco ancora a capire un modello base di systemd:
Voglio eseguire un processo di avvio una volta (come un contenitore docker o formattare un'unità) all'avvio, con successo fino al completamento. Ma se uso Type = oneshot per questo, allora non posso usare Restart = on-failure, e se fallisce, allora non riproverò il lavoro. Mi sto perdendo qualcosa di ovvio qui?
Ho anche provato a impostare Type = simple con Restart = on-failure, ma in molti casi ho bisogno del seguente comportamento (dalla manpage) che i servizi oneshot danno:
Il comportamento di oneshot è simile a semplice; tuttavia, si prevede che il processo debba terminare prima che systemd avvii le unità di follow-up.
aggiornamenti:
Restart=
impostando FailureAction=[self.unit]
(sostituisci [self.unit] con il nome dell'unità). È un po 'confuso, ma almeno esplicito e abbastanza facile da seguire.
FailureAction
accetta gli stessi valori di StartLimitAction
, e tutti tranne none
attivano un arresto di qualche tipo.
Restart
e avvolgere inmy_cmd
questo modo:ExecStart=/bin/sh -c 'while ! my_cmd; do sleep 1; done'
insieme a unTimeoutStartSec
valore ragionevole .