В чем разница между сервисом systemd
Type
oneshot
и simple
? Эта ссылка заявляет, что для таймеров используется simple
вместо oneshot
. Я не могу понять это правильно.
В чем разница между Systemd Service Type onehot и простотой
Ответ 1
Type=oneshot
обслуживания Type=oneshot
:
-
блоки при запуске до тех пор, пока не завершится первый процесс, и его состояние будет объявлено как "активирующее";
-
как только первый процесс завершается, происходит переход от "активации" прямо к "неактивному", если не установлен параметр
RemainAfterExit=true
(в этом случае он становится "активным" без процессов!); -
может иметь любое число (0 или более) директив
ExecStart=
которые будут выполняться последовательно (ожидая, когда каждый начатый процесс завершит работу до начала следующего); -
может оставить
ExecStart=
но имеетExecStop=
(полезно вместе сRemainAfterExit=true
для организацииRemainAfterExit=true
которые будут выполняться при выключениях системы).
Type=simple
сервисный модуль:
-
не блокируется при запуске (т.е. становится "активным" сразу после отмены первого процесса, даже если он все еще инициализируется!);
-
как только первый процесс завершается, переходит из "активного" в "неактивный" (отсутствует опция
RemainAfterExit=
); -
как правило, обескураживается, потому что нет способа отличить ситуации, такие как "вышли на старт из-за ошибки конфигурации" из "сбой после 500 мс времени исполнения" и т.п.
Оба Type=oneshot
и Type=simple
units:
- игнорировать любых детей первого процесса, поэтому не используйте эти режимы с процессами
Type=oneshot
(обратите внимание: вы можете использоватьType=oneshot
сKillMode=none
, но только делайте это, если знаете, что делаете).
Ответ 2
С точки зрения systemd, Type=simple
является видом огня и забывает. Systemd просто ExecStart=
процесс, определенный в ExecStart=
и продолжает свой путь, даже если процесс не запускается.