Actuellement, il existe en fait trois façons différentes pour les logiciels d'être démarrés 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 démarré et exécuté directement par l'utilisateur.
SysV
La manière traditionnelle de démarrer des services sous Linux était de placer un script dans /etc/init.d
, puis d'utiliser la commande update-rc.d
(ou dans les distributions basées sur RedHat, chkconfig
) pour l'activer ou le désactiver.
Cette commande utilise une logique quelque peu compliquée pour créer des liens symboliques dans /etc/rc#.d
, qui contrôlent l'ordre de démarrage des services. Si vous exécutez ls /etc/rc2.d
, vous pouvez voir l'ordre dans lequel les services seront arrêtés avec un nom de fichier comme K##xxxx
et démarrés avec des noms de fichiers S##xxxx
. Le ##
dans S##xxxx
signifie un "ordre de démarrage" pour le service xxxx
. En revanche, le ##
dans K##xxxx
signifie l'ordre d'arrêt 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, un après l'autre, ce qui rendait les temps de démarrage du système vraiment lents. Des tentatives ont été faites pour paralléliser cela, mais elles étaient maladroites et difficiles à exploiter pleinement. C'était la principale raison pour laquelle Upstart a été créé.
Upstart
Upstart utilise des fichiers de définition de tâches dans /etc/init
pour définir sur quels événements un service doit être démarré. Ainsi, pendant que le système démarre, 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 alors qu'un autre service lié au processeur 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 tâches upstart en exécutant ls /etc/init/*.conf
Laissez-moi juste m'arrêter ici et 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. Tout en travaillant dans l'équipe serveur chez Canonical ces derniers mois, j'ai travaillé sur un certain nombre de fichiers de tâches convertis, et la meilleure partie est qu'elle 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, seuls quelques services réseau traditionnels, comme squid et samba, ont été convertis.
Un service est-il basé sur upstart ?
Pour savoir si un service est basé sur upstart, vous pouvez exécuter la commande statut :
status nomduservice
S'il s'agit d'une tâche upstart, cela affichera ceci :
$ status statd
statd start/running, processus 942
Mais s'il ne l'est pas, vous verrez quelque chose de plus comme ceci :
$ status apache2
statut : Unknown job: apache2
Dans ce cas, apache2
n'a pas été converti en upstart. Donc, pour désactiver apache2
, vous exécutez simplement
sudo update-rc.d apache2 disable
sudo service apache2 stop
Désactiver les services (tâches) en upstart
Les définitions de tâches upstart n'ont pas de commande update-rc.d
. Pour désactiver la tâche, vous devez éditer directement le fichier de tâche pour la désactiver. Il y a deux façons de le faire.
Si vous voulez toujours pouvoir le démarrer manuellement, alors vous devez mettre en commentaire la condition start on
. Disons que vous voulez installer samba, mais ne pas le démarrer automatiquement. Voici le fichier de tâche (dans natty) :
description "Serveur de fichiers SMB/CIFS"
auteur "Steve Langasek "
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 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
Cependant, si vous ne voulez jamais que samba démarre, je vous suggère en fait de supprimer le package. En revanche, si vous voulez l'installer, mais qu'il ne soit pas démarrable, vous pouvez également faire :
mv /etc/init/smbd.conf /etc/init/smbd.conf.disabled
Désactiver un service en utilisant la clause start/stop (à partir de la version 11.04)
À partir de la version d'upstart qui sera dans le 11.04, il y a un nouveau mot-clé qui désactive les clauses start on
et stop on
: 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
# commande à partir du shell root
echo manual >> /etc/init/mysql.override
Vous pouvez créer un fichier override
pour désactiver un service sans éditer du tout la définition de la tâche, en y mettant simplement le mot-clé manual
.
1 votes
Pour la mise en réseau, veuillez consulter : askubuntu.com/questions/230698/…
0 votes
Ceci serait utile pour ceux bloqués sur Fedora 12 et qui ont atterri ici. Au cas où le lien ne fonctionne plus,
chkconfig
est ce que vous cherchez.3 votes
Veuillez noter que la réponse pour Ubuntu 14.04 est toujours manquante ici.
3 votes
@MarcelloNuccio: À partir d'Ubuntu 15.04, Upstart a été remplacé par Systemd.
0 votes
Les programmes de démarrage automatique sont configurés dans des manifestes
autostart
ou dans des fichiers*.service
à plusieurs emplacements, ainsi que dansinit.d
oucrontab
. Voir : unix.stackexchange.com/a/525845/43233