Liste tous les services à partir du démarrage

15

Je cherche un moyen d'obtenir une liste de tous les services (/etc/init.d ou upstart ou systemd), qui sont censés démarrer (ou avoir été démarrés au démarrage).

Comment obtenir 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 me montre pas quels services sont censés fonctionner . Il appelle tous les scripts d'initialisation avec l' statusargument " ". Ceci est une liste de tous les services qui pourraient être exécutés.

Mais je voudrais savoir si un service qui avait été démarré au démarrage est toujours en cours d'exécution.

Exemple…

J'ai installé webfs. Mais je ne veux pas qu'il fonctionne au démarrage. Ainsi je l' ai désactivé: sudo update-rc.d webfs disable. Et j'ai également installé la samba et elle devrait fonctionner au démarrage. Mais il est arrêté (pour une raison quelconque). sudo service --status-allne 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 que celle-ci (samba) est censée être allumée.

Donc…

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 facile d'obtenir le "statut" de ces services (sinon, je vais simplement parcourir cette liste et exécuter "service $ service status", ou quelque chose comme ça).

Merci, Alexander

Edit 2015-05-04: Je suis sur Ubuntu 14.04.

L'objectif principal de cette question est le suivant:

Mais je voudrais savoir si un service qui avait été démarré au démarrage est toujours en cours d'exécution.

Pour cette raison, initctl listn'aide pas beaucoup. Il ne prend pas vraiment en compte les services démarrés par les /etc/init.dscripts (par rapport aux scripts parvenus dans /etc/init).

Une liste de /etc/rc?.d/S*n'aide pas non plus. Il générerait une liste de services, qui auraient pu être démarrés dans un niveau d'exécution donné. Cela ne me montre pas si un service, qui aurait dû être démarré, est toujours en cours d'exécution.

Fondamentalement, je recherche quelque chose comme svcs -xSolaris pour Ubuntu. Avec svcs -x, j'aurais une sortie si un service, qui a été démarré, ne fonctionne plus. Cela, j'aurais également besoin d'Ubuntu.

Raison: je voudrais avoir une vérification générique (plus ou moins ...) de notre système de surveillance Icinga / Nagios, qui m'alerterait, si un service ne fonctionne plus, qui devrait fonctionner. Comme nous avons de nombreux serveurs différents pour de nombreux clients différents, il n'est pas vraiment évolutif pour définir une liste de services "importants".

Alexander Skwar
la source
Quelle version d'Ubuntu?
AB
@Parto La réponse acceptée dans cette question est de initctl listrépertorier les processus démarrés / en cours d'exécution, mais cette liste inclurait également les processus démarrés manuellement
Sergiy Kolodyazhnyy
@AB Je suis sur Ubuntu 14.04.
Alexander Skwar
@Parto askubuntu.com/questions/218/… ne fournit pas tout à fait une réponse. Comme l'a écrit @Serg, la réponse était à utiliser initctl list. Mais cela ne répond pas vraiment, car cela montrerait également les services démarrés manuellement. Et il ne montre pas les services qui ne fonctionnent pas.
Alexander Skwar

Réponses:

19

Tous les services démarrent au démarrage:

initctl list

Liste de tous les services qui existent dans le système:

service --status-all
kaxi1993
la source
Faux. Aucun ne fournit la liste des services activés (démarrés au démarrage). Ils montrent tous les services connus (dont certains peuvent être désactivés) et s'ils sont en cours d'exécution (ce qui ne signifie pas nécessairement qu'ils sont démarrés automatiquement).
Reinier Post
2

Voici mon oneliner grep -i 'runlevel' /etc/init/* | awk '!/#/ && /start on/ && /2/ {gsub("/"," "); print $0 }' | cut -d ' ' -f4-

Une sortie un peu plus propre 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 parvenus sont tous stockés dans /etc/init/, non? Les emplois là-bas ont tous une ligne indiquant à quel niveau d'exécution ils commencent. Le niveau d'exécution 2 est un démarrage normal, le niveau d'exécution par défaut. Donc, si nous grep toutes les lignes qui disent runlevelet nettoyons la sortie de grep avec awk pour ne faire correspondre que les lignes avec start onet le niveau d'exécution # 2, nous obtenons la liste des travaux parvenus. Le reste est juste pour formater les besoins, remplacer / dans les noms de fichiers dans l'espace et couper le chemin d'accès à ces fichiers, en laissant les noms de fichiers eux-mêmes.

La !/#/partie consiste à répondre aux directives de démarrage éventuellement commentées, que j'avais personnellement ajoutées manuellement.

Entre autres choses, il y a /etc/rc2.doù (si je comprends bien) vous avez des scripts de priorité moindre.

Une doublure brute pour cela est: ls /etc/rc2.d/* | grep S | awk '{sub("S"," "); print $2}

Les scripts qui, dans ce dossier, s'exécutent réellement au niveau d'exécution 2 sont nommés en commençant par S et suivis d'un numéro de priorité. Maintenant, fondamentalement, nous obtenons tous les fichiers commençant par S, et nous les listons simplement avec un nom prioritaire (nous devons encore trouver comment nettoyer cela).

Comme muru l'a correctement souligné dans les commentaires, il existe également des /etc/init/*.overridefichiers qui peuvent ".. .Modifier le déroulement d'un travail sans avoir à modifier directement son fichier de configuration" ( page de manuel d'init )

À l'heure actuelle, comme je n'ai pas beaucoup d'expérience avec ces fichiers, je ne peux que suggérer de parcourir ces fichiers .override en utilisant le manuel 'grep' /etc/init/*.override 'pour répertorier les services qui doivent démarrer manuellement avec les commandes initctlou services.

Sergiy Kolodyazhnyy
la source
Notez qu'en raison des dépendances d'événements, il n'est pas facile de déterminer si un service donné entraînera le démarrage d'autres services. Il y a aussi la petite question des .overridefichiers.
muru le
@Serg merci. Mais cela ne concerne que les nouveautés. De plus, "ls /etc/rc2.d/* ..." n'aide pas beaucoup. Il montrerait quels services auraient pu être lancés. Mais cela ne montre pas quels services sont toujours en cours d'exécution. Je suppose que le point principal de mon message n'était pas clair. Je cherche: Mais je voudrais savoir, si un service, qui avait été démarré au démarrage est toujours en cours d'exécution. Je ne sais pas si vous connaissez Solaris. Là, je ferais simplement "svcs -x", et s'il renvoie quelque chose, je sais que quelque chose ne fonctionne pas. J'aurais besoin de quelque chose comme ça pour Ubuntu.
Alexander Skwar
Eh bien, on pourrait écrire un script ou une fonction bashrc pour comparer les sorties de mon one liner là-bas et de la liste initctl. Vous voulez que je poste ça?
Sergiy Kolodyazhnyy
@Serg bien - si vous offrez;)
Alexander Skwar
2

Liste de tous les services et de leur état d'exécution respectif - 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

Modification interactive basée sur le texte de tous les éléments répertorié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

Vous devrez peut-être l'installer si ce n'est pas le cas:

apt install sysv-rc-conf
bzean
la source