web-dev-qa-db-fra.com

Dans Ubuntu, y a-t-il une commande pour afficher une liste de TOUS les services de démarrage automatique?

Dans Ubuntu,

  1. Existe-t-il une commande pour afficher une liste de tous les services de démarrage automatique?
  2. Existe-t-il une commande permettant de vérifier si un service est démarré automatiquement au démarrage ou non?

J'ai fait Google et IRC. Je ne trouve pas la réponse. Peut-être qu’il n’existe pas de telles commandes dans Ubuntu. Au début, je pensais que tous les services à démarrage automatique seraient sous /etc/rc2.d/, mais je me suis trompé à ce sujet. Certains ne sont configurés que sous /etc/init/*.conf. Ensuite, j'ai essayé l'outil chkconfig (installé manuellement), il ne fonctionne pas tout le temps. Par exemple, cela donne un résultat incorrect pour mongodb qui est démarré automatiquement à partir de /etc/init/mongodb.conf.

service --status-all et initctl list peuvent uniquement indiquer le statut actuel des services au lieu du statut de démarrage automatique. update-rc.d est une commande permettant de modifier le statut de démarrage automatique au lieu d'afficher le statut.

S'il n'y a pas de réponse à ma question, je me demande simplement pourquoi il est si difficile de vérifier les services de démarrage automatique dans Ubuntu.

21
SSS

Ubuntu utilise Upstart à la place du système init traditionnel. Upstart est plus fort que init, mais c'est un peu plus compliqué que init.

Upstart, en revanche, est basé sur les événements. Un "événement" peut être quelque chose comme le "démarrage" ... ou il peut être beaucoup plus spécifique, comme "le réseau est prêt à être utilisé maintenant". Vous pouvez spécifier quels scripts dépendent de quels événements. Tout ce qui n'attend pas un événement peut être exécuté chaque fois que de la CPU est disponible.

Ce système basé sur les événements présente un autre avantage: vous pouvez en principe l’utiliser même après que le système est opérationnel. Upstart doit éventuellement prendre en charge des tâches telles que la connexion de périphériques externes tels que des clés USB (actuellement gérées par udev et hal), ou l'exécution de programmes à des moments spécifiques (actuellement gérés par cron).

Comme vous devez le savoir maintenant, un démon mort (qui ne s'exécute pas au démarrage) peut être actif et démarrer à cause d'un événement.

Ubuntu a à la fois/etc/init, pour Upstart, et /etc/init.d, pour les anciens fichiers SysV. Certains de ses fichiers sont des scripts SysV Init standard qui n’ont pas encore été migrés. Cependant, certains services ayant migré maintiennent un lien entre /etc/init.d et/lib/init/upstart-job. Si vous en utilisez un, cela fonctionne, mais il affiche d'abord un avertissement:

Plutôt que d'appeler des scripts d'initialisation via /etc/init.d, utilisez l'utilitaire service (8), par exemple. service mysql restart

Le script que vous tentez d'appeler ayant été converti en tâche Upstart, vous pouvez également utiliser l'utilitaire restart (8), par exemple. redémarrez mysql.

Sur une machine Upstart, init vient de Upstart. Au lieu d'exécuter un script maître rc appelant les scripts pour un niveau d'exécution spécifique, init d'Uststart extrait les travaux de son répertoire de travaux.

Nous savons maintenant qu'il n'existe pas de moyen simple de répertorier les démons à démarrage automatique. Vous devez répertorier tous les démons et les vérifier un par un. Le démon peut être lancé par init ou par upstart ou même par un événement ultérieur. Le moyen le plus simple d'obtenir cette liste consiste à exécuter cette commande dans le shell:

initctl show-config

La sortie ressemble à ceci:

...
hostname
  start on startup
udevtrigger
  start on ((startup and started udev) and not-container)
tty2
  start on (runlevel [23] and ((not-container or container CONTAINER=lxc) or container CONTAINER=lxc-libvirt))
...

Certains éléments, comme le premier, sont si simples, hostname démarre au démarrage. Mais d'autres éléments peuvent sembler plus compliqués. (Mais heureusement lisible par l'homme :-))

10
Ehsan

En fait, tous les services sont présents dans /etc/init.d uniquement:

rc0.d contains the services which runs in runlevel 0
rc1.d contains the services which runs in runlevel 1
rc2.d contains the services which runs in runlevel 2
rc3.d contains the services which runs in runlevel 3
rc4.d contains the services which runs in runlevel 4
rc5.d contains the services which runs in runlevel 5
rc6.d contains the services which runs in runlevel 6

Une dernière chose: tous les services sont présents sous rc0.drc1.drc2.drc3.drc4.drc5.drc6.d également, mais il s’agit d’un lien symbolique vers /etc/init.d uniquement.

Voici le contenu du répertoire rc1.d:

lrwxrwxrwx 1 root root  20 Aug 17 14:54 K15pulseaudio -> ../init.d/pulseaudio
lrwxrwxrwx 1 root root  22 Nov 28 18:47 K20acpi-support -> ../init.d/acpi-support
lrwxrwxrwx 1 root root  20 Aug 17 14:54 K20kerneloops -> ../init.d/kerneloops
lrwxrwxrwx 1 root root  23 Nov  7 15:24 K20openbsd-inetd -> ../init.d/openbsd-inetd
lrwxrwxrwx 1 root root  15 Aug 17 14:54 K20saned -> ../init.d/saned
lrwxrwxrwx 1 root root  27 Aug 17 14:54 K20speech-dispatcher -> ../init.d/speech-dispatcher
-rw-r--r-- 1 root root 369 Apr 14  2012 README
lrwxrwxrwx 1 root root  19 Aug 17 14:54 S30killprocs -> ../init.d/killprocs
lrwxrwxrwx 1 root root  19 Aug 17 14:54 S70dns-clean -> ../init.d/dns-clean

Ici, vous pouvez observer le lien symbolique vers init.d (K15pulseaudio -> ../init.d/pulseaudio).

Mais ici chaque service est lié à init.d, non? Mais chaque service ne commencera pas; la raison est deux scripts.

Le premier est un script S (S30killprocs) ---> start

Le second est un script k (K15pulseaudio) ---> kill

Tous les services de script K tuent les services et tous les services de script S démarrent les services pour ce niveau d'exécution.

En bref

S70dns-clean -> ../init.d/dns-clean start dns-clean service au niveau d'exécution 1.

K15pulseaudio -> ../init.d/pulseaudio tue le service pulseaudio au niveau d'exécution 1.

5
max

Vous pouvez installer sysv-rc-conf qui est un programme ncurses pour configurer/afficher graphiquement les niveaux de rc.

2
dseira

Existe-t-il une commande pour afficher une liste de tous les services de démarrage automatique?

Regardez ici: update-rc-d-cheat-sheet

Existe-t-il une commande permettant de vérifier si un service est démarré automatiquement au démarrage ou non?

Aucune, à ma connaissance (ce qui ne veut rien dire;), mais vous pouvez commencer à lire ici: forum askubuntu - dépendance au service

0
StefanKaerst