Я декілька разів прочитав мандат сторінки служби 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значенням.