Я пишу сценарій оболонки, який хотів би запустити як демон при запуску, не використовуючи зовнішніх інструментів, таких як daemontools або daemonize .
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
і ті , і інші речі для запуску довільних скриптів, без надання для роботи в якості демон. Оскільки ви автор, повністю керуючи тим, як написаний цей скрипт, зробіть його таким, щоб його можна було просто запустити із системного unitfile або rc.d сценарію. Ви ж вказати «Правильні»!