J'écris un script shell que j'aimerais exécuter en tant que démon au démarrage sans utiliser d'outils externes comme daemontools ou daemonize .
Linux Daemon Writing HOWTO
Selon le Linux Daemon Writing HOWTO , un démon approprié a les caractéristiques suivantes:
- fourches du processus parent
- ferme tous les descripteurs de fichiers ( par exemple,
stdin
,stdout
,stderr
) - ouvre les journaux pour l'écriture (si configuré)
- change le répertoire de travail en un répertoire persistant (généralement
/
) - réinitialise le masque du mode fichier (umask)
- crée un identifiant de session unique (SID)
Présentation de daemonize
L' introduction de daemonize va plus loin, déclarant qu'un démon typique aussi:
- se dissocie de son terminal de commande (s'il y en a un) et ignore tous les signaux du terminal
- se dissocie de son groupe de processus
- poignées
SIGCLD
Comment puis-je faire tout cela dans un sh
, dash
ou bash
script avec des outils Linux communs seulement?
Le script devrait pouvoir fonctionner sur autant de distributions que possible sans logiciel supplémentaire, bien que Debian soit notre objectif principal.
REMARQUE: Je sais qu'il existe de nombreuses réponses sur le réseau StackExchange recommandant l'utilisation de nohup
ou setsid
, mais aucune de ces méthodes ne répond à toutes les exigences ci-dessus.
EDIT: La page de manuel daemon (7) donne également quelques pointeurs, bien qu'il semble y avoir des différences entre les SysV
démons de style ancien et les plus systemd
récents. Étant donné que la compatibilité avec une variété de distributions est importante, veuillez vous assurer que la réponse indique clairement toute différence.
daemon
et les autres sont pour l' exécution arbitraire des scripts shell avec aucune disposition pour l' exécution en un démon. Puisque vous êtes l'auteur et que vous contrôlez entièrement la façon dont ce script est écrit, faites en sorte qu'il puisse simplement être lancé à partir d'un fichier unitaire systemd ou d'un script rc.d. Vous avez spécifié « approprié »!