Я пишу скрипт , который я хотел бы работать в качестве демона при запуске без использования внешних инструментов , таких как 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. Вы же указать «Правильные»!