Actuellement, il existe trois manières différentes de démarrer un logiciel en tant que service dans Ubuntu, SysV , Upstart 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 méthode traditionnelle de démarrage des services sous Linux consistait à insérer un script /etc/init.d
, puis à utiliser la 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 vous courez, 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 démarré avec les noms de fichiers S##xxxx
. Le ##
in S##xxxx
signifie un "ordre de démarrage" pour le service xxxx
. Inversement, ##
in K##xxxx
signifie l'ordre de mise à mort pour le service xxxx
.
Un problème majeur avec SysV était que lors du démarrage du système, tout devait être fait en série, une chose après l’autre, ce qui ralentissait considérablement l’amorçage du système . Des tentatives ont été faites pour mettre cela en parallèle, mais elles étaient aléatoires et difficiles à exploiter pleinement. C'est la raison principale pour laquelle Upstart a été créé.
Parvenu
Upstart utilise des fichiers de définition de travail /etc/init
pour 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 qu'un autre service lié au CPU s'exécute, ou pendant que le réseau attend qu'une adresse IP dynamique soit attribuée.
Vous pouvez voir tous les fichiers de travail parvenus 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 version par défaut. Au cours des derniers mois au sein de l’équipe serveur de Canonical, j’ai travaillé sur un certain nombre de fichiers d’emploi convertis, et le plus agréable est que cela permet de supprimer le script 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 de réseau traditionnels, tels que calmar et samba , ont été convertis.
Un service est-il basé sur le début?
Afin de déterminer si un service est basé sur une version upstart, vous pouvez exécuter la commande status:
status servicename
Si c'est un travail récent , il montrera ceci:
$ status statd
statd start/running, process 942
Mais si ce n'est pas le cas, vous verrez quelque chose de plus semblable à ceci:
$ status apache2
status: Unknown job: apache2
Dans ce cas, apache2
n'a pas été converti en upstart . Donc, pour apache2
vous désactiver, lancez simplement
sudo update-rc.d apache2 disable
sudo service apache2 stop
Désactiver les services (jobs) dans upstart
Les définitions de travail Upstart n'ont pas de update-rc.d
commande. Pour désactiver le travail, vous devez éditer le fichier de travail directement pour le désactiver. Il y a deux façons de faire ça.
Si vous souhaitez toujours pouvoir le démarrer manuellement, vous devez commenter la start on
condition. Supposons que vous souhaitiez installer Samba , mais ne le faites pas démarrer automatiquement. Voici le fichier de travail (en natty):
description "SMB/CIFS File Server"
author "Steve Langasek <steve.langasek@ubuntu.com>"
start on local-filesystems
stop on runlevel [!2345]
respawn
pre-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/samba
end script
exec smbd -F
Pour désactiver la samba , vous pouvez simplement mettre un #
" start on local-filesystems
" devant . Notez que même si la sauvegarde ne démarre pas au démarrage, vous devez l’arrêter cette fois avec
sudo service smbd stop
Si, toutefois, vous ne voulez jamais que samba démarre, je suggère de supprimer réellement le paquet. Si, toutefois, vous voulez l’installer, mais pas démarrer, vous pouvez aussi 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 dans 11.04, il y a un nouveau mot clé qui désactive les strophes start on
et stop on
:: manual
. Il existe donc un autre moyen de désactiver le service à partir de 11.04:
echo 'manual' | sudo tee /etc/init/mysql.override
# command from root shell
echo manual >> /etc/init/mysql.override
Vous pouvez créer un override
fichier pour désactiver un service sans modifier la définition du travail, en y mettant simplement le manual
mot clé.