Je cherche un moyen d’obtenir une liste de tous les services (/etc/init.d ou upstart ou systemd), qui sont censés commencer (ou avoir été démarrés au démarrage).
Comment obtenez-vous une liste de tous les services de démarrage? - Je connais cette question et elle suggère d'utiliser service --status-all
.
Mais cela ne montre pas quels services sont censés fonctionner . Il appelle tous les scripts d'initialisation avec l'argument "status
". Voici une liste de tous les services pouvant être en cours d'exécution.
Mais j'aimerais savoir si un service qui a été démarré au démarrage est toujours en cours d'exécution.
Exemple…
J'ai des webfs installés. Mais je ne veux pas qu'il soit lancé au démarrage. Ainsi je l'ai désactivé: Sudo update-rc.d webfs disable
. Et j'ai aussi samba installé et il devrait être en cours d'exécution au démarrage. Mais il est arrêté (pour une raison quelconque). Sudo service --status-all
ne m'aide pas ici:
$ Sudo service --status-all 2>/dev/null | grep -E 'samba$|webfs'
[ - ] samba
[ - ] webfs
Les deux sont éteints mais je n'ai aucune idée, celui-là (samba) est censé être allumé.
Alors…
Comment puis-je obtenir une liste de tous les services qui démarrent au démarrage? Et, en tant qu’extension, existe-t-il un moyen simple d’obtenir le "statut"? de ces services (sinon, je vais simplement parcourir cette liste et lancer "service $ état du service" ou quelque chose comme ça).
Merci Alexandre
Edit 2015-05-04: Je suis sur Ubuntu 14.04.
Le sujet principal de cette question est le suivant:
Mais j'aimerais savoir si un service démarré au démarrage est toujours en cours d'exécution.
De ce fait, initctl list
n'aide pas beaucoup. Cela ne prend pas vraiment en compte les services lancés par les scripts /etc/init.d
(par rapport aux scripts de démarrage dans /etc/init
).
De plus, une liste de /etc/rc?.d/S*
n'aide pas. Cela générerait une liste de services, qui auraient pu être démarrés à un niveau d'exécution donné. Cela ne montre pas si un service qui aurait dû être démarré est toujours en cours d'exécution.
En gros, je cherche quelque chose comme svcs -x
de Solaris pour Ubuntu. Avec svcs -x
, j'aurais une sortie si un service qui avait été démarré ne fonctionnait plus. Ceci, j’aurais aussi besoin d’Ubuntu.
Raison: j'aimerais avoir un contrôle (plus ou moins ...) générique de notre système de surveillance Icinga/Nagios, qui m'avertirait si un service ne fonctionne plus, ce qui devrait l'être. Comme nous avons beaucoup de serveurs différents pour de nombreux clients différents, la liste des services "importants" n’est pas vraiment évolutive.
Tous les services démarrent au démarrage:
initctl list
Liste de tous les services qui existent dans le système:
service --status-all
Voici mon oneliner grep -i 'runlevel' /etc/init/* | awk '!/#/ && /start on/ && /2/ {gsub("/"," "); print $0 }' | cut -d ' ' -f4-
Une sortie un peu plus nette peut être obtenue avec grep -i 'runlevel' /etc/init/* | awk '/start on/ && /2/ {gsub("/"," "); gsub(":", " ");gsub(".conf"," "); print $3 }'
Entrons maintenant dans les détails. Les travaux Upstart sont tous stockés dans /etc/init/
, non? Les travaux là-bas ont tous une ligne indiquant le niveau d'exécution auquel ils commencent. Le niveau d'exécution 2 est un démarrage normal, le niveau d'exécution par défaut. Donc, si nous grepons toutes les lignes qui disent runlevel
et nettoyons la sortie de grep avec awk pour ne faire correspondre que les lignes avec start on
et runlevel # 2, nous obtenons la liste des travaux à venir. Le reste ne sert qu'à définir les besoins, remplacer/dans les noms de fichiers par des espaces et couper le chemin d'accès à ces fichiers, en laissant les noms de fichiers eux-mêmes.
La partie !/#/
doit traiter des directives de démarrage éventuellement commentées, que j’avais personnellement ajoutées manuellement.
Entre autres choses, il y a /etc/rc2.d
où (si je comprends bien) vous avez des scripts de moindre priorité.
One-Liner brut pour cela est: ls /etc/rc2.d/* | grep S | awk '{sub("S"," "); print $2}
Les scripts de ce dossier qui s'exécutent réellement au niveau d'exécution 2 sont nommés en commençant par S et suivis du numéro de priorité. Maintenant, fondamentalement, nous obtenons tous les fichiers commençant par S, et nous les listons simplement avec le nom de priorité (il reste à trouver comment nettoyer cela).
Comme il a été souligné à juste titre dans les commentaires, il existe également des fichiers /etc/init/*.override
qui peuvent ". .Modifier le mode d'exécution d'un travail sans modifier directement son fichier de configuration" ( man page init )
À l'heure actuelle, vu que je n'ai pas beaucoup d'expérience avec ces fichiers, je ne peux que suggérer de parcourir ces fichiers .override en utilisant 'grep' manual '/etc/init/*.override' pour répertorier les services dont le démarrage est dit. manuellement avec les commandes initctl
ou services
.
Répertorie tous les services et l'état de chaque niveau d'exécution - style chkconfig:
# sysv-rc-conf --list
acpid 2:on 3:on 4:on 5:on
Apache-htcac 0:off 1:off 2:off 3:off 4:off 5:off 6:off
Apache2 0:off 1:off 2:on 3:on 4:on 5:on 6:off
Édition interactive basée sur le texte de tous les éléments énumérés:
# sysv-rc-conf
l SysV Runlevel Config -: stop service =/+: start service h: help q: quit qk
x
x service 1 2 3 4 5 0 6 S
x ----------------------------------------------------------------------------
x acpid [ ] [X] [X] [X] [X] [ ] [ ] [ ]
x Apache-ht$ [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ]
x Apache2 [ ] [X] [X] [X] [X] [ ] [ ] [ ]
x
x Use the arrow keys or mouse to move around. ^n: next pg ^p: prev pg
x space: toggle service on / off
Peut-être devrez-vous l'installer sinon
apt install sysv-rc-conf