Должен ли systemctl stop honor Restart = always?

Бросьте gnuplot во вложенную оболочку, и тогда это будет последняя выполняемая команда. Вам также больше не требуется последний cd, потому что изменение каталога в начале подшивки влияет только на gnuplot, и поэтому перенаправление на /dev/null также является спорным.

( cd some/path; gnuplot -e gnuplot_file.gp )

Возможно, вы хотели, чтобы перенаправление на /dev/null относилось ко всей команде? (Однако это не то, что вы написали в своем вопросе).

( cd some/path; gnuplot -e gnuplot_file.gp ) >/dev/null

Наконец, я бы предпочел, чтобы фрагмент, подобный этому, запускал gnuplot только в том случае, если начальный cd был успешным. Это повлияет на статус выхода, так как вы получите failed, если смена каталога не удалась, но, вероятно, это более безопасный код

( cd some/path && gnuplot -e gnuplot_file.gp ) >/dev/null
0
15.03.2019, 18:01
2 ответа

Нет. Да. И я не уверен.

Для программы, связанной с libc, такой как udev:

eval $(systemctl show -p MainPID systemd-udevd)
gdb -p $MainPID
p (void)_exit(0)
quit

Однако Docker написан в go, что необычно недружелюбно к вызову функций C (и, возможно, использует собственные реализации системных вызовов? ). Поэтому я не знаю, будет ли это работать на докерде.

Если вы просто хотите дважды -проверить, что Restart=alwaysработает так, как вы думаете, systemd -udevd.service уже использует Restart=always. Таким образом, вы можете продемонстрировать Restart=always, используя приведенное выше. У меня сработало :-).

0
28.01.2020, 03:54

Большое спасибо за ваши комментарии. Возиться с приведенным выше (лучшим описанием этого, основанным на моем недостатке знаний ), это то, что я считаю поведением:

  • Приведенный выше сценарий Eval/gdp, похоже, работает на docker.service. Это приводит к завершению процесса dockerd и его перезапуску. В /var/log/messages не записывается сообщение о том, что процессы завершились со статусом Zero. Если я изменю сценарий, чтобы использовать статус выхода 1, это записывается в файл журнала сообщений как статус = 1, и служба также перезапускается
  • SIGTERM также вызывает остановку docker.service, отсутствие записи кода выхода в /var/log/messages и перезапуск процесса
  • systemctl stop docker.service вызывает остановку процесса и не перезапускает его
  • systemctl stop systemd -udevd останавливает процесс и не перезапускает его, т.е. это похоже на SIGSTOP

Последнее замечание, по-видимому, предполагает, что команда STOP не поддерживает перезапуск=всегда.

1
28.01.2020, 03:54

Теги

Похожие вопросы