13

Я пишу свой первый системный файл systemd .

Для Type есть несколько вариантов: forking , simple и т.д. Я прочитал Документацию Redhat по этой теме (Таблица 9.9), но все еще не уверен, когда мне следует использовать какой вариант.

Какие-нибудь рекомендации?

1 ответ1

22

Что произойдет, когда вы запустите службу вручную из командной строки (без использования префиксной команды nohup или суффикса & для запуска в фоновом режиме)?

a) Если служба запускается и продолжает работать, а приглашение не возвращается, пока вы не нажмете Control-C или не остановите службу каким-либо другим способом: тогда Type = simple - правильный выбор.

б) Если приглашение возвращается, но служба продолжает работать в фоновом режиме (т. е. служба самостоятельно демонизируется), тогда Type = forking является правильным выбором.

c) Если служба выполняет свою работу и возвращается к приглашению, не оставляя ничего запущенного (т. е. служба просто настраивает некоторые параметры ядра, отправляет команду чему-то другому или делает что-то подобное), тогда Type = oneshot , вероятно, является правильным выбором. В этом случае ExecStart службы может быть командой для "установки" чего-либо, а ExecStop будет соответствующей командой для " сброса" этого события . Этот тип обычно имеет преимущество RemainAfterExit=true , поэтому systemd будет отслеживать "состояние" этой службы в зависимости от того, была ли вещь недавно "установлена" или "не установлена".

Другие значения Type являются особыми случаями. Например, если служба использует соединение D-Bus, тогда Type = dbus может быть лучшим выбором. Он systemd об этом факте, и затем systemd будет отслеживать этот сервис (и все, что от него зависит) по наличию этого сервиса на шине D-Bus.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .