Comment activer ou désactiver les services?

820

J'ai lu comment activer et désactiver des services dans Ubuntu et il semble qu'il existe différentes possibilités pour les gérer.

La première méthode que j'ai trouvée consiste update-rc.dà ajouter de nouveaux services au démarrage, qui visent le /etc/init.ddossier et son contenu.

L'autre que j'ai trouvé est d'éditer des .conffichiers dans le /etc/initdossier.

Quelle est la méthode recommandée pour activer / désactiver / ajouter des services et pourquoi?

Pourriez-vous, s'il vous plaît, donner un exemple, étape par étape, à l'épreuve des balles, sur la façon d'ajouter un service dans Ubuntu et de l'activer et de le désactiver?

NDA
la source
1
Pour la mise en réseau, veuillez consulter: askubuntu.com/questions/230698/…
Jorge Castro
Ce serait utile pour ceux qui sont bloqués sur Fedora 12 et ont atterri ici. Dans le cas où linkrot chkconfigest ce que vous recherchez.
Bleeding Fingers
3
Notez que la réponse pour Ubuntu 14.04 est toujours manquante ici.
Reinier Post
2
@MarcelloNuccio: à partir d'Ubuntu 15.04, Upstart est devenu obsolète au profit de Systemd.
Dan Dascalescu
Les programmes à démarrage automatique sont configurés dans des autostartmanifestes ou dans des *.servicefichiers situés à plusieurs endroits, ainsi que dans init.dou crontab. Voir: unix.stackexchange.com/a/525845/43233
Noam Manos Le

Réponses:

831

Certains services peuvent être activés / désactivés à l'aide de l'interface graphique (comme l' startupapplication) ou du terminal.

Pour le terminal, vous avez plusieurs options. Commencez par ouvrir un terminal (saisissez "terminal" dans le tableau de bord, par exemple, et ouvrez-le). Ensuite:

Activer / désactiver temporairement des services

Pour arrêter et démarrer les services temporairement (vous ne devez pas les activer / désactiver pour les futurs démarrages), vous pouvez taper service SERVICE_NAME. Par exemple:

  • sudo service apache2 stop( ARRÊTERA le service Apache jusqu'au redémarrage ou jusqu'à ce que vous le redémarriez).

  • sudo service apache2 start( COMMENCERA le service Apache en supposant qu'il a été arrêté avant.).

  • service apache2 status (Vous indiquera le statut du service, si celui-ci est activé / en cours d'exécution sur désactivé / NON en cours d'exécution.).

  • sudo service apache2 restart( RESTART le service. Ceci est le plus souvent utilisé lorsque vous avez changé, un fichier de configuration. Dans ce cas, si vous avez changé une configuration PHP ou une configuration Apache. Redémarrer vous évitera d'avoir à arrêter / démarrer avec 2 lignes de commande )

  • service apache2(Dans ce cas, puisque vous n'avez pas mentionné ACTION à exécuter pour le service, toutes les options disponibles pour ce service seront affichées.) Cet aspect varie en fonction du service. Par exemple, avec MySQL, manque un paramètre. Pour d'autres services tels que les services de réseau, mentionnons la petite liste de toutes les options disponibles.


SYSTEMD

À partir de Ubuntu 15.04, Upstart sera obsolète au profit de Systemd. Avec Systemd pour gérer les services, nous pouvons effectuer les tâches suivantes:

systemctl start SERVICE- Utilisez-le pour démarrer un service. Ne persiste pas après le redémarrage

systemctl stop SERVICE- Utilisez-le pour arrêter un service. Ne persiste pas après le redémarrage

systemctl restart SERVICE - Utilisez-le pour redémarrer un service

systemctl reload SERVICE - Si le service le prend en charge, il rechargera les fichiers de configuration qui lui sont associés sans interrompre aucun processus utilisant le service.

systemctl status SERVICE- Affiche l'état d'un service. Indique si un service est en cours d'exécution.

systemctl enable SERVICE- Active le service, au prochain redémarrage ou au prochain événement de démarrage. Il persiste après le redémarrage.

systemctl disable SERVICE- Désactive le service lors du prochain redémarrage ou lors du prochain événement d'arrêt. Il persiste après le redémarrage.

systemctl is-enabled SERVICE - Vérifiez si un service est actuellement configuré pour démarrer ou non au prochain redémarrage.

systemctl is-active SERVICE - Vérifiez si un service est actuellement actif.

systemctl show SERVICE - Afficher toutes les informations sur le service.

sudo systemctl mask SERVICE- désactiver complètement un service en le liant à /dev/null; vous ne pouvez pas démarrer le service manuellement ni l'activer.

sudo systemctl unmask SERVICE- Supprime le lien vers /dev/nullet restaure la possibilité d'activer et / ou de démarrer manuellement le service.


UPSTART (obsolète depuis le 15.04)

Si nous voulons utiliser la méthode officielle Upstart (notez que, pour le moment, tous les services n'ont pas été convertis au format Upstart), nous pourrions utiliser les commandes suivantes:

status SERVICE- Cela nous dira si un service converti est en cours d'exécution ou non. Notez que ceci est dépréciée en faveur de start, stop, statuset restart. Il nous dira également si un service n'a pas encore été converti en upstart:

Un service converti afficherait généralement l'état actuel (Démarrer, En cours, Arrêter ...) et l'identifiant du processus. Un service non converti donnerait une erreur à propos d'un travail inconnu .

Certains raccourcis peuvent uniquement fonctionner avec la servicecommande ci-dessus, mais pas avec les commandes ci-dessous, à moins qu'ils ne soient convertis à 100% en services upstart:

  • DÉBUT -sudo start mysql

  • STOP -sudo stop mysql

  • REDÉMARRER -sudo restart mysql

  • STATUS -sudo status smbd

Activer / désactiver un service

Pour que le service démarre ou s’arrête de manière permanente, vous devez:

echo manual | sudo tee /etc/init/SERVICE.override

où la strophe manualempêchera Upstart de charger automatiquement le service au prochain démarrage. Tout service avec la .overridefin aura priorité sur le fichier de service d'origine. Par la suite, vous ne pourrez démarrer le service manuellement. Si vous ne le souhaitez pas, supprimez simplement le .override. Par exemple:

echo manual | sudo tee /etc/init/mysql.override

Va mettre le service MySQL en manualmode. Si vous ne le souhaitez pas, vous pouvez simplement faire

sudo rm /etc/init/mysql.override

et redémarrez pour que le service redémarre automatiquement. Bien sûr, pour activer un service, le moyen le plus courant consiste à l’installer. Si vous installez Apache, Nginx, MySQL ou d’autres, ils démarreront automatiquement à la fin de l’installation et à chaque démarrage de l’ordinateur. Désactiver, comme mentionné ci-dessus, utilisera le service manual.

Luis Alvarado
la source
Avez-vous besoin d'ajouter .serviceà chaque commande? systemctl mongod statusa bien fonctionné.
Dan Dascalescu
@DanDascalescu non, mais laissez-moi clarifier cela.
Luis Alvarado
4
Le fichier .override doit-il être placé dans /etc/init.d/, c’est-à-dire où le service est placé?
Obi Wan - PallavJha
Pourquoi Upstart est obsolète dans 15.04? Quelle est la bonne façon d'exécuter des scripts au démarrage / au redémarrage dans Ubuntu 16.04 ou version ultérieure?
Kamalakannan J
1
Merci pour cette réponse complète. L' systemdensemble de commandes fonctionne à merveille sur Ubuntu 18.04.
Doktor J
354

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.dcommande (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.dvous pouvez voir l'ordre dans lequel les services seront tués avec un nom de fichier comme K##xxxxet démarré avec les noms de fichiers S##xxxx. Le ##in S##xxxxsignifie un "ordre de démarrage" pour le service xxxx. Inversement, ##in K##xxxxsignifie 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/initpour 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, apache2n'a pas été converti en upstart . Donc, pour apache2vous 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.dcommande. 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 oncondition. 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 <[email protected]>"

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 onet 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 overridefichier pour désactiver un service sans modifier la définition du travail, en y mettant simplement le manualmot clé.

SpamapS
la source
20
On dirait que 11.04 a aussi priorité. Donc, il echo manual >> /etc/init/<service>.overrideest préférable de laisser le fichier .conf original intact. Quoi qu’il en soit, c’est toujours dommage qu’il ait fallu 3 ans pour développer une telle activation / désactivation de base, et il n’ya pas d’interface graphique pour cela.
MestreLion
3
update-rc.d est ce qui compte vraiment
Timofey
2
Il semble que le sujet initial soit beaucoup mieux traité que la réponse qui a été identifiée comme la réponse définitive par l’affiche originale de la question. Merci! :)
Henning
1
Dans mon cas, le fichier /etc/init/ssh.confexiste , mais status sshet à la status sshdfois dire « travail inconnu ». Cette réponse ne semble pas aborder une telle possibilité?
Brian Z
1
status sshme donne un 'emploi inconnu' aussi, mais service ssh statustravaille pour moi
ptim
129

sysv-rc-conf

Essayez d'utiliser sysv-rc-conf

sudo apt-get install sysv-rc-conf

et pour commencer à gérer les services, exécutez

sudo sysv-rc-conf

Ce qui ouvrira une fenêtre interactive comme celle-ci

entrez la description de l'image ici

Vous pouvez continuer à naviguer dans les pages en utilisant Ctrl+npour la page suivante et Ctrl+ppour la page précédente. Vous pouvez activer et désactiver les services en sélectionnant SPACEles niveaux d'exécution souhaités.

Emplois-Admin

Une autre alternative serait Jobs-Admin en installant via

sudo apt-get install jobs-admin

Qui fournit également une interface graphique comme celle-ci

aperçu de jobs-admin

Pour afficher plus de tâches, vous devez cocher la case Afficher les tâches protégées dans son menu.

chkconfig

Et la troisième option serait chkconfig ,

sudo apt-get install chkconfig

Il peut être utilisé via la CLI chkconfig, affichant la liste des tâches On / Off. Nous pouvons également afficher les services système à l'aide dechkconfig –list

Les services peuvent être activés à l'aide de

chkconfig <service> on

Les services peuvent être désactivés en utilisant

chkconfig <service> off

Et nous pouvons même ajouter notre propre service, en utilisant un script d'initialisation approprié avec des en-têtes appropriés.

chkconfig --add <service>

update-rc.d

Et une autre option peut être référée ici update-rc.d , expliqué brièvement ici .

Notez que pour Ubuntu Server 12.04, update-rc.d est utilisé à la place de chkconfig.

Atenz
la source
1
sur le serveur Ubuntu:Package chkconfig is not available, but is referred to by another package.
pwned
@pwned Vous êtes libre d'éditer et de publier les informations mises à jour concernant l'édition du serveur. Merci.
Atenz
J'ai fait comme vous l'avez suggéré, maintenant c'est en examen par les pairs.
Pwned
jobs-admin ne permet pas de changer de travail (Ubuntu 14.04), produisant plutôt un rapport d'accident ;-)
Sadi
5
sysv-rc-conf n'est pas adapté à une utilisation avec upstart ou systemd, il est évident qu'il ne concerne que l'ancien système System 5 rc, qui n'est plus le cas par défaut pour Ubuntu Linux depuis près de 10 ans. Le bogue Debian n ° 791689 le reconnaît et demande pourquoi il n’a pas été marqué comme étant en conflit avec systemd.
JdeBP
48

Pour ceux d'entre nous qui utilisent Ubuntu sur SSH, je pense que la meilleure option est rcconfun programme à base de texte:

sudo apt-get install rcconf
sudo rcconf

texte alternatif

Naviguez avec les touches de tabulation et les touches fléchées, appuyez sur la barre d'espacement pour activer / désactiver. Les modifications sont persistantes lors des redémarrages.

Capture d'écran empruntée à cet article de blog , qui montre également sysv-rc-conf- un outil similaire qui vous permet également de définir le niveau d'exécution. (Pour ceux qui se soucient assez des niveaux d'exécution pour souhaiter les changer :)

Malheureusement, rcconf ne fonctionne pas avec upstart (services listés dans /etc/init/*), mais avec le mécanisme traditionnel ( ls -l /etc/init.d/*ceux qui ne sont pas des liens symboliques).

Heureusement, de nombreux services pertinents pour ssh-ing sur un serveur (Apache, Tomcat, mdadm, boinc-client ...) n'ont pas encore été déplacés.

jg-faustus
la source
6
Est-ce que cela fonctionne toujours avec les nouveaux arrivants?
Octobre
3
Malheureusement non. Mais cela a fonctionné dans tous les cas que je souhaitais changer - les tâches à effectuer semblaient être principalement des choses que je ne voulais jamais désactiver - horloge matérielle, démon de journalisation, réseau, etc. (sur le serveur Ubuntu, au moins). Mais c'est quelque chose à prendre en compte (je n'étais pas :), j'ai mis à jour le post.
Jg-Faustus
Malheureusement, mysql a été converti en upstart. Et c’est un service que j’utilise seulement quand je fais un projet.
MestreLion
Il y a un bogue avec rcconf sur Ubuntu 12.04 qui empêche le programme de démarrer. Pour résoudre le problème, vous devez installer le package de boîte de dialogue.
devius
1
Depuis que cette réponse a été écrite, a update-rc.dété modifiée et que certaines de ses fonctionnalités obsolètes ont été supprimées . Le bogue Debian n ° 727735 indique que rcconf n’a pas été modifié pour correspondre. Et non, rcconf ne fonctionne pas non plus avec systemd et ne s'applique donc à aucun des systèmes init par défaut pour Ubuntu Linux au cours de la dernière décennie.
JdeBP
18

J'ai découvert qu'il y avait cet outil graphique, quelque chose comme BUM mais compatible avec Upstart:

  • Emplois-Admin

    sudo apt-get install jobs-admin
    
Postadelmaga
la source
Mais c'est trop simple, et ne permet pas de changer les "travaux protégés" (qu'est-ce que c'est que les jobbs? Apple a des Jobs, le système d'exploitation a des démons!)
kakaz
Je ne permet même pas de changer les "travaux non protégés" (Ubuntu 14.04), produisant plutôt un rapport d'accident ;-)
Sadi
12

Editer le fichier de configuration upstart existant (comme décrit ci-dessus) n’est pas une si bonne idée. Un paquet mis à jour pourrait fournir une configuration mise à jour, et vous deviez répéter vos modifications à plusieurs reprises.

En regardant, man 5 initon trouvera une solution plus appropriée: utiliser une configuration prioritaire. Petit exemple: Disons que nous avons un service appelé "foobar", il y aurait donc un fichier appelé /etc/init/foobar.confavec sa configuration upstart. Maintenant, vous ne voulez pas supprimer ce fichier, ni le modifier - mais vous ne voulez pas non plus que ce service soit exécuté? Donc placer un override fichier à côté: /etc/init/foobar.override, contenant ( le cas échéant l' en- tête avec la description et) à la place les start on/ stop onlignes que vous placez une ligne avec un seul mot: manual. De cette façon, vous indiquez à upstart d'utiliser fondamentalement le foobar.conf, mais vous substituez la définition de démarrage pour ne démarrer ce service que s'il est appliqué manuellement (via service foobar startnotre exemple).

Izzy
la source
2

J'utilise Stacer. Il montre également les services et les processus. Une boîte à outils complète du système graphique. https://github.com/oguzhaninan/Stacer

HDK Bouma
la source