web-dev-qa-db-fra.com

Comment fonctionnent les services dans Debian et comment puis-je les gérer?

Dans Windows, j'ai le gestionnaire de services, où je vois tous les services système, qui peuvent être démarrés via Windows lui-même, je configure l'utilisateur qu'il utilise, la gestion des droits est là, et je peux transmettre des variables et d'autres informations aux services , Je peux les nommer, et je peux créer des services en double d'un programme et ainsi de suite. J'ai donc un outil de gestion principal sous Windows.

Comment puis-je faire de même sous Linux? Comment puis-je déclencher pour exécuter "svnserve" au démarrage, ou comment configurer les services pour qu'ils s'exécutent dans un contexte spécial. Comment visualiser tous les services "programmés"?

81
Erdinc Ay

Il existe actuellement 3 principaux systèmes d'initialisation utilisés par Linux. Il y a quelques années, il n'y en avait qu'un, SysVinit. Mais SysVinit manquait sérieusement de capacités telles que la représentation graphique des dépendances de service, il est donc désormais obsolète dans la plupart des distributions. Actuellement, la plupart des distributions passent à systemd . Bien qu'il y ait aussi pstart .

Mais voici la réponse à votre question pour chacun des 3 systèmes d'initialisation:

SysVinit

SysVinit actuellement utilisé par Debian et RedHat. Bien que la prochaine version de RedHat (7) utilisera systemd.

La manière universelle d'activer les services SysVinit au démarrage consiste à les lier symboliquement dans /etc/rc3.d (ou /etc/rc2.d). Tous les services peuvent être trouvés dans /etc/init.d. Notez cependant que les distributions auront souvent leur propre outil pour gérer ces fichiers, et cet outil doit être utilisé à la place. (Fedora/RedHat a service et chkconfig, ubuntu a update-rc.d)

Liste des services:

ls /etc/init.d/

Démarrer le service:

/etc/init.d/{SERVICENAME} start

ou

service {SERVICENAME} start

Aire d'autoroute:

/etc/init.d/{SERVICENAME} stop

ou

service {SERVICENAME} stop

Activer le service:

cd /etc/rc3.d
ln -s ../init.d/{SERVICENAME} S95{SERVICENAME}

(le S95 est utilisé pour spécifier la commande. S01 démarrera avant S02, etc.)

Désactiver le service:

rm /etc/rc3.d/*{SERVICENAME}

Systemd

Fedora est la distribution la plus notable utilisant systemd. Bien qu'il soit utilisé par beaucoup d'autres. De plus, Debian ayant choisi d'aller avec systemd plutôt que upstart, il deviendra le système upstart par défaut pour la plupart des distributions (ubuntu a déjà annoncé qu'il abandonnerait upstart pour systemd).

Liste des services:

systemctl list-unit-files

Démarrer le service:

systemctl start {SERVICENAME}

Aire d'autoroute:

systemctl stop {SERVICENAME}

Activer le service:

systemctl enable {SERVICENAME}

Désactiver le service:

systemctl disable {SERVICENAME}

Parvenu

Upstart a été développé par les gens d'Ubuntu. Mais après debian a décidé d'aller avec systemd , Ubuntu a annoncé qu'ils abandonneraient .

Upstart a également été brièvement utilisé par RedHat, car il est présent dans RHEL-6, mais il n'est pas couramment utilisé.

Liste des services:

initctl list

Démarrer le service:

initctl start {SERVICENAME}

Aire d'autoroute:

initctl stop {SERVICENAME}

Activer le service:

Malheureusement, 2 façons:

  1. Il y aura un fichier /etc/default/{SERVICENAME} qui contient une ligne ENABLED=.... Modifiez cette ligne en ENABLED=1.

  2. Il y aura un fichier /etc/init/{SERVICENAME}.override. Assurez-vous qu'il contient start (ou qu'il est totalement absent), pas manual.

Désactiver le service:

echo manual > /etc/init/{SERVICENAME}.override

Remarque: Il existe également le système d'initialisation 'OpenRC' qui est utilisé par Gentoo. Actuellement, Gentoo est la seule distribution qui l'utilise, et il n'est pas envisagé pour une utilisation, ni pris en charge par aucune autre distribution. Je ne couvre donc pas son utilisation (bien que si l'opinion est que je le fais, je peux l'ajouter).

126
Patrick

Différentes distributions utilisent différents mécanismes pour gérer les services. Le logiciel de gestion des services s'appelle init , après le nom traditionnel du tout premier processus (avec ID de processus 1) qui est chargé de démarrer les autres.

Debian utilise la variante traditionnelle SysVinit d'init. Sous ce système, il existe une collection de scripts dans le répertoire /etc/init (cet emplacement et d'autres peuvent varier légèrement entre les distributions qui utilisent SysVinit). Ces scripts ne sont pas appelés directement, mais via des liens symboliques dans les répertoires /etc/rc?.d. Ce sont la présence et le nom de ces liens symboliques qui déterminent quand les services sont démarrés. Pour plus de détails, lisez le chapitre sur init dans la référence Debian .

Jetez un œil dans /etc/rc?.d pour voir quels services sont déjà présents. La lettre ou le chiffre avant le point est le niveau d'exécution; les entrées dont le nom commence par S sont exécutées avec l'argument start lors de la saisie du niveau d'exécution, et les entrées dont le nom commence par K sont exécutées à la sortie du niveau d'exécution. La séquence de niveau d'exécution normale est: S au démarrage (donc /etc/rcS.d/S* sont exécutés), puis 2 (donc /etc/rc2.d/S* sont exécutés). Au moment de l'arrêt, /etc/rc2.d/K* sont exécutés, puis le niveau d'exécution passe à 0 (ou 6 pour un redémarrage).

En bref, si vous souhaitez créer un script de démarrage pour un nouveau service:

  • Écrivez un script Shell dans /etc/init.d. Ce script doit accepter un argument qui peut être start, stop, force-reload, restart, ou (facultatif) reload ou status. La différence entre reload et restart est que restart est équivalent à stop suivi de start tandis que reload recharge le configuration sans rien arrêter (si le service le prend en charge); force-reload fait reload si disponible et restart sinon. Voir les fichiers existants et Faire exécuter des scripts au démarrage avec Debian pour des exemples.
  • Courir update-rc.d pour créer des liens symboliques pour démarrer et arrêter votre service. La plupart des services s'exécutent dans les niveaux d'exécution 2, 3, 4 et 5.

Notez que pour fournir un accès svn, il peut être plus facile de configurer Apache et d'utiliser le protocole HTTP ou HTTPS. Cela a l'avantage secondaire de permettre une navigation rapide dans le référentiel via un navigateur Web.

Dans un contexte Unix traditionnel, les services n'ont rien de spécial. Les services ne sont que des processus, mais à deux exceptions près: ils n'ont pas besoin de terminal et ils démarrent au démarrage. la façon dont ils démarrent au démarrage dépend de init (qui peut être sysv init, bsd init, upstart, systemd ou autre; vérifiez votre page de manuel pour init) et si vous utilisez un wrapper pour la tâche ou pour la configuration init. Rien ne vous empêche d'exécuter un service à partir d'un terminal, en fait, il est courant à des fins de test.

2
hildred