Actuellement, il existe en fait trois façons différentes de démarrer un logiciel en tant que service dans Ubuntu, SysV, Parvenu et systemd. Un service est défini ici comme un programme exécuté par le système en arrière-plan, par opposition à un programme démarré et exécuté directement par l'utilisateur.
SysV
La façon traditionnelle de démarrer des services sous Linux consistait à placer un script dans /etc/init.d
, puis utilisez le update-rc.d
commande (ou dans les distributions basées sur RedHat, chkconfig
) pour l'activer ou le désactiver.
Cette commande utilise une logique légèrement compliquée pour créer des liens symboliques dans /etc/rc#.d
, qui contrôlent l'ordre de démarrage des services. Si tu cours ls /etc/rc2.d
vous pouvez voir l'ordre dans lequel les services seront tués avec un nom de fichier comme K##xxxx
et a commencé avec des noms de fichiers S##xxxx
. Le ##
dans S##xxxx
désigne un "ordre de départ" pour le service xxxx
. Inversement, le ##
dans K##xxxx
signifie l'ordre de mise à mort pour le service xxxx
.
Un problème majeur avec SysV était-ce lors du démarrage du système, tout devait être fait en série, une chose après l'autre, rendant les temps de démarrage du système vraiment lents. Des tentatives ont été faites pour mettre cela en parallèle, mais elles étaient aléatoires et difficiles à exploiter pleinement. C'était la principale raison pour laquelle Parvenu a été créé.
Parvenu
Upstart utilise des fichiers de définition de tâches dans /etc/init
définir sur quels événements un service doit être démarré. Ainsi, pendant le démarrage du système, upstart traite divers événements, puis peut démarrer plusieurs services en parallèle. Cela leur permet d'utiliser pleinement les ressources du système, par exemple en démarrant un service lié au disque pendant l'exécution d'un autre service lié au processeur ou pendant que le réseau attend l'attribution d'une adresse IP dynamique.
Vous pouvez voir tous les fichiers de travail upstart en exécutant ls /etc/init/*.conf
Permettez-moi de m'arrêter ici et de dire que si vous ne savez pas ce qu'est un service, ou ce qu'il fait, NE le désactivez PAS!
Tous les services n'ont pas été convertis en upstart. Pendant que je travaillais dans l'équipe serveur de Canonical au cours des derniers mois, j'ai travaillé sur un certain nombre de fichiers de travail convertis, et la meilleure partie est que cela permet de se débarrasser de toute la "magie" du script et de simplement insérer quelques commandes ici et là pour définir exactement comment démarrer le service, et rien de plus. Mais pour l'instant, seule une poignée de services réseau traditionnels, comme calmar et samba, ont été convertis.
Un service est-il basé sur un débutant?
Afin de déterminer si un service est basé sur upstart, vous pouvez exécuter la commande status:
status servicename
Si c'est un parvenu job, ça montrera ça:
$ status statdstatd start/running, process 942
Mais si ce n'est pas le cas, vous verrez quelque chose de plus comme ça:
$ status apache2status: Unknown job: apache2
Dans ce cas, apache2
n'a pas été converti en parvenu. Donc, pour désactiver apache2
tu viens de courir
sudo update-rc.d apache2 disablesudo service apache2 stop
Désactiver les services (emplois) dans upstart
Les définitions d'emploi arriviste n'ont pas de update-rc.d
commande. Pour désactiver la tâche, vous devez modifier directement le fichier de tâche pour la désactiver. Il y a deux façons de procéder.
Si vous souhaitez toujours pouvoir le démarrer manuellement, vous devez commenter le start on
condition. Dites que vous voulez installer samba, mais ne pas le faire démarrer automatiquement. Voici le dossier d'emploi (en natty):
description "SMB/CIFS File Server"author "Steve Langasek <steve.langasek@ubuntu.com>"start on local-filesystemsstop on runlevel [!2345]respawnpre-start script RUN_MODE="daemons" [ -r /etc/default/samba ] && . /etc/default/samba [ "$RUN_MODE" = inetd ] && { stop; exit 0; } install -o root -g root -m 755 -d /var/run/sambaend scriptexec smbd -F
Désactiver samba, vous pouvez simplement mettre un #
devant le "start on local-filesystems
". Notez que bien qu'il ne redémarre pas au démarrage, vous devez toujours l'arrêter cette fois avec
sudo service smbd stop
Si, cependant, vous ne voulez jamais samba pour commencer, je suggérerais de retirer le paquet. Si, cependant, vous voulez qu'il soit installé, mais pas démarrable, vous pouvez également le faire:
mv /etc/init/smbd.conf /etc/init/smbd.conf.disabled
Désactiver un service à l'aide de la strophe start/stop (à partir de 11.04)
En commençant par la version de upstart qui sera en 11.04, il y a un nouveau mot-clé qui désactive le start on
et stop on
strophe: manual
. Donc, une autre façon de désactiver le service à partir du 11.04 est de faire:
echo 'manual' | sudo tee /etc/init/mysql.override# command from root shellecho manual >> /etc/init/mysql.override
Vous pouvez créer un override
fichier pour désactiver un service sans modifier la définition du travail du tout, en mettant simplement le manual
mot-clé dedans.