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.
FailureActionprzyjmuje te same wartości, co StartLimitActionwszystkie, z wyjątkiem nonepewnego rodzaju wyłączenia.
Restarti zawinięcie wmy_cmdten sposób:ExecStart=/bin/sh -c 'while ! my_cmd; do sleep 1; done'wraz z pewną rozsądnąTimeoutStartSecwartością.