Я декілька разів прочитав мандат сторінки служби systemd, але все ще не можу визначити основний шаблон системи:
Я хочу запустити процес запуску один раз (як контейнер докера або відформатувати диск) під час завантаження, успішно до завершення. Але якщо для цього я використовую Type = oneshot, я не можу використовувати Restart = on-fail, і якщо він не вдасться, він не повторить роботу. Я пропускаю тут щось очевидне?
Я також спробував встановити Type = simple за допомогою Restart = on-fail, але для цього мені потрібна така поведінка (з manpage сторінки), яку надають onehot служби:
Поведінка одного з них схожа на просту; однак, очікується, що процес повинен завершитися до того, як системні системи почнуть спостереження.
Оновлення:
Restart=
встановивши FailureAction=[self.unit]
(замініть [self.unit] на ім'я пристрою). Це наче хакі, але принаймні явне і досить просте.
FailureAction
приймає ті самі значення StartLimitAction
, що і всі, крім того, що none
викликає якесь відключення.
Restart
та загорнутиmy_cmd
так:ExecStart=/bin/sh -c 'while ! my_cmd; do sleep 1; done'
разом із деяким розумнимTimeoutStartSec
значенням.