Cela a peut-être plus à voir avec la détection des systèmes d'exploitation, mais j'ai particulièrement besoin du système init actuellement utilisé sur le système.
Fedora 15 et Ubuntu utilisent maintenant systemd, Ubuntu utilisait Upstart (valeur par défaut jusqu'à 15.04), tandis que d'autres utilisent des variantes de System V.
J'ai une application que je suis en train d'écrire pour être un démon multi-plateforme. Les scripts d'initialisation sont générés dynamiquement en fonction de paramètres pouvant être transmis lors de la configuration.
Ce que j'aimerais faire, c'est générer uniquement le script pour le système d'init particulier qu'ils utilisent. De cette façon, le script d'installation peut être exécuté raisonnablement sans paramètre en tant que root et le démon peut être "installé" automatiquement.
C'est ce que je suis venu avec:
- Recherchez systemd, upstart, etc. dans / bin
- Comparez / proc / 1 / comm avec le systemd, upstart, etc
- Demander à l'utilisateur
Quel serait le meilleur moyen de procéder de la sorte?
Type de parenté, puis-je compter sur bash pour être sur la majorité de * nix ou est-ce que cela dépend de la distribution / du système d'exploitation?
Plateformes cibles:
- Mac OS
- Linux (toutes les distributions)
- BSD (toutes les versions)
- Solaris, Minix et autres * nix
ps -p 1 -o command
(affiche le chemin d'accès au courant init
). Sur Arch Linux et Fedora (IIRC), il s’agit d’un lien symbolique vers le systemd
binaire (probablement le même sur tous les systemd
systèmes). Le sur upstart
, init --help
imprimera les informations d'utilisation, et sur ma boîte, upstart
est mentionné où il est dit à qui envoyer un courriel. Sur FreeBSD (sysV), cela retournera une erreur. Il peut y avoir des indices similaires sur d’autres systèmes, mais depuis que je pose cette question, j’ai décidé de les créer pour toutes les plateformes et de créer des packages distincts pour chacune d’elles.
sudo lsof -a -p 1 -d txt
peut donner des résultats encore plus exacts. ps
peut imprimer un nom arbitraire, alors que lsof
vous obtiendrez le vrai chemin d’exécutable. (Voir ma question unix.stackexchange.com/questions/102453/… )