Бросьте 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
Нет. Да. И я не уверен.
Для программы, связанной с 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
, используя приведенное выше. У меня сработало :-).
Большое спасибо за ваши комментарии. Возиться с приведенным выше (лучшим описанием этого, основанным на моем недостатке знаний ), это то, что я считаю поведением:
Последнее замечание, по-видимому, предполагает, что команда STOP не поддерживает перезапуск=всегда.