Что произойдет, когда вы запустите службу вручную из командной строки (без использования префиксной команды 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.