Я пишу скрипт , который я хотел бы работать в качестве демона при запуске без использования внешних инструментов , таких как DaemonTools или демон .
Linux Daemon Writing HOWTO
Согласно Linux Daemon Writing HOWTO , правильный демон имеет следующие характеристики:
- вилки из родительского процесса
- закрывает все файловые дескрипторы (то есть
stdin
,stdout
,stderr
) - открывает логи для записи (если настроено)
- изменяет рабочий каталог на постоянный (обычно
/
) - сбрасывает маску режима файла (umask)
- создает уникальный идентификатор сеанса (SID)
Демонизация Введение
Демон Введение идет дальше, утверждая , что типичный демон также:
- отсоединяется от терминала управления (если таковой имеется) и игнорирует все сигналы терминала
- отделяется от своей группы процессов
- ручки
SIGCLD
Как бы сделать все это в sh
, dash
или bash
сценарий только с общими инструментами Linux?
Сценарий должен быть в состоянии работать на максимально возможном количестве дистрибутивов без дополнительного программного обеспечения, хотя Debian является нашей основной задачей.
ПРИМЕЧАНИЕ. Я знаю, что в сети StackExchange есть множество ответов, в которых рекомендуется использовать nohup
или setsid
, но ни один из этих методов не отвечает всем вышеперечисленным требованиям.
EDIT: демон (7) страница руководства также дает некоторые указатели, хотя , кажется, некоторые различия между старым стилем SysV
демонами и новыми из systemd
них. Поскольку совместимость с различными дистрибутивами важна, пожалуйста, убедитесь, что ответ проясняет любые различия.
daemon
и другие вещи предназначены для запуска произвольных сценариев оболочки без предоставления возможности запуска как демон. Поскольку вы автор, полностью контролирующий, как пишется этот скрипт, сделайте так, чтобы его можно было просто запустить из файла systemd unitfile или rc.d. Вы же указать «Правильные»!