Przeczytałem kilka razy stronę systemową usługi, ale nadal nie mogę znaleźć podstawowego wzorca systemowego:
Chcę raz uruchomić proces uruchamiania (np. Kontener Dockera lub sformatować dysk) przy starcie systemu, aby zakończyć. Ale jeśli użyję do tego Type = oneshot, to nie będę mógł użyć Restart = w przypadku awarii, a jeśli się nie powiedzie, to nie spróbuje ponownie wykonać zadania. Czy brakuje mi czegoś oczywistego?
Próbowałem także ustawić Type = simple z Restart = w razie awarii, ale w wielu przypadkach potrzebuję następującego zachowania (z strony podręcznika), które dają usługi oneshot:
Zachowanie oneshota jest podobne do prostego; oczekuje się jednak, że proces musi zakończyć się, zanim systemd rozpocznie jednostki kontrolne.
Aktualizacje:
Restart=
przez ustawienie FailureAction=[self.unit]
(zamień [self.unit] na nazwę urządzenia). To trochę hacky, ale przynajmniej wyraźne i wystarczająco łatwe do naśladowania.
FailureAction
przyjmuje te same wartości, co StartLimitAction
wszystkie, z wyjątkiem none
pewnego rodzaju wyłączenia.
Restart
i zawinięcie wmy_cmd
ten sposób:ExecStart=/bin/sh -c 'while ! my_cmd; do sleep 1; done'
wraz z pewną rozsądnąTimeoutStartSec
wartością.