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

79

Dans Windows, j'ai le gestionnaire de services, où je vois tous les services système, qui peut être démarré à travers 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 créer des services en double pour un programme, etc. J'ai donc un outil de gestion principal dans Windows.

Comment puis-je faire la même chose sous Linux? Comment puis-je déclencher l'exécution de "svnserve" au démarrage, ou comment puis-je configurer les services pour qu'ils s'exécutent dans un contexte particulier. Comment puis-je voir tous les services "programmés"?

Erdinc Ay
la source
9
Quelle distribution et quelle version utilisez-vous? La gestion des services (les services sont presque toujours appelés "démons" dans le monde Unix) était simple et semi-standard. Les choses sont plus variées ces jours-ci. Et pas toujours sympa. :) De plus, qu'entendez-vous par contexte ?
Alexios
Bien qu'il semble que systemd gagne lentement la guerre système init. Debian est le dernier grand support qui utilise encore l'ancien SysVinit et est actuellement en train de déterminer le système init à utiliser.
Patrick
1
Actuellement, je travaille avec Debian (dernière version stable), et par contexte, j'entends des variables de chemin d'accès ou un contexte d'utilisateur spécifié.
Erdinc Ay
1
Si vous avez seulement besoin d’utiliser une servercommande sur Debian, consultez unix.stackexchange.com/q/226089/130402
Peter Krauss

Réponses:

124

Il existe actuellement 3 principaux systèmes init utilisés par linux. Il y a quelques années, il n'y en avait qu'un, SysVinit. Cependant, SysVinit manquait cruellement de fonctionnalités telles que la représentation graphique de la dépendance des services. Elle est donc désormais obsolète dans la plupart des distributions. Actuellement, la plupart des distributions passent à systemd . Bien qu'il y ait aussi du débutant .

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

 

SysVinit

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

Le moyen universel d'activer les services SysVinit au démarrage consiste à les lier de manière symbolique entre /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 que cet outil devrait plutôt être utilisé. (Fedora / RedHat a serviceet 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 S95sert à spécifier l'ordre. S01 commencera avant S02, etc.)

Désactiver le service:

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

 

Systemd

La distribution la plus notable utilisant systemd est Fedora. Bien qu'il soit utilisé par beaucoup d'autres. De plus, avec Debian ayant choisi de passer à systemd avec updart, il deviendra le système de facto upstart pour la plupart des distributions (ubuntu a déjà annoncé qu’elles abandonneraient 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 que Debian ait décidé d’utiliser Systemd , Ubuntu a annoncé qu’ils abandonneraient le système .

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:

2 façons malheureusement:

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

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

Désactiver le service:

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

Remarque: il existe également le système d'initiation 'OpenRC' utilisé par Gentoo. Actuellement, Gentoo est la seule distribution qui l'utilise, et son utilisation n'est pas envisagée, ni prise en charge par une autre distribution. Donc, je ne couvre pas son utilisation (bien que si l’opinion est la même, je peux l’ajouter).

Patrick
la source
OpenRC est un peu une abstraction pour SysVinit. Cela ne le remplace pas, il y ajoute.
Spidey
Grande rédaction! Quelques corrections mineures: RHEL 6.x (et donc CentOS 6.x et le reste des dérivés) utilise upstart, comme Ubuntu (bien que la plupart des services utilisent toujours les scripts SysV). De plus, j'ajouterais que "chkconfig" (RH) et "update-rc.d" (Debian) sont les moyens "officiels" pour ajouter des liens aux répertoires rc? .D.
Rsuarez
@rsuarez bon point sur la chose RHEL6. Bien que pas beaucoup semble l'utiliser. La plupart du système fonctionne toujours via SysVinit (17 par la suite, 89 SysVinit sur l'un de mes systèmes RHEL6). Et chkconfiget update-rc.dsont mentionnés. Voir le deuxième paragraphe sous SysVinit :-)
Patrick
@ Patrick est d'accord sur # 1; "Oops!" sur # 2 :-)
rsuarez
1
Merci pour la réponse complète, maintenant j'ai la vue d'ensemble. J'utilise actuellement Debian (dernière version stable), ici en Europe germanophone, les recommandations sont les meilleures, mais je vais peut-être essayer Redhat.
Erdinc Ay
9

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 le processus ID 1), chargé de démarrer les autres.

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

Jetez un coup d'oeil /etc/rc?.dpour 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 Ssont exécutées avec l'argument startlors de la saisie du niveau d'exécution, et les entrées dont le nom commence par Ksont exécutées lors de la sortie du niveau d'exécution. La séquence normale du niveau d'exécution est la suivante: S au démarrage (ainsi /etc/rcS.d/S*exécutés), puis 2 (donc /etc/rc2.d/S*exécutés). Au moment de l'arrêt, ils /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 voulez créer un script de démarrage pour un nouveau service:

  • Ecrire un script shell dans /etc/init.d. Ce script doit accepter un argument qui peut être start, stop, force-reload, restartou ( en option) reloadou status. La différence entre reloadet restartest restartéquivalente à stopsuivie de startpendant le reloadrechargement de la configuration sans rien arrêter (si le service le prend en charge); force-reloadfait reloadsi disponible et restartsinon. Voir les fichiers existants et Faire en sorte que les scripts soient exécutés au démarrage avec Debian pour des exemples.
  • Exécuter update-rc.dpour créer des liens symboliques pour démarrer et arrêter votre service. La plupart des services fonctionnent 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 présente l’avantage supplémentaire de permettre une navigation rapide dans le référentiel via un navigateur Web.

Gilles, arrête de faire le mal
la source
2

Un fond Unix traditionnel, les services n’ont rien de spécial. Les services sont juste des processus, mais à deux exceptions près: ils n'ont pas besoin de terminal et ils démarrent au démarrage. La manière dont ils démarrent au démarrage dépend de init (qui peut être sysv init, bsd init, upstart, systemd ou autre chose; consultez 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, c’est en fait un test courant.

Hildred
la source