[LINUX] J'ai bien étudié Systemd

introduction

Chaque fois que je veux démarrer un serveur CentOS au travail et mettre dans une base de données ou un appareil et l'exécuter Par exemple, s'il s'agissait de PostgreSQL

systemctl enable postgresql
systemctl start postgresql

Et si c'est un démon Docker

systemctl enable docker
systemctl start docker

Je fais. J'ai utilisé cette commande "systemctl" sans y penser, J'ai l'occasion d'enquêter correctement, je vais donc le résumer ici.

Sujet principal

Damons et services

Le processus qui s'exécute sur le système d'exploitation peut être grossièrement divisé.

Il y a. Le premier est, par exemple,

python hello.py
./start.sh
make install

S'applique à. Puisque l'utilisateur le démarre, il est appelé processus utilisateur </ b>. Vous pouvez vérifier le processus en cours en exécutant la commande ps.

Ce dernier est un processus lancé par le système lorsque le système d'exploitation démarre et s'exécute en arrière-plan, ce qui est appelé un démon </ b>. Les plus connus incluent des bases de données telles que postgresql et mysql, des proxy inverses tels que httpd et nginx, et d'autres appareils tels que jenkins et github.

systemd

systemd est un processus qui démarre ces démons et gère le processus au démarrage du système d'exploitation. La commande systemctl accède à ce systemd pour démarrer / arrêter le démon, le surveiller, et ainsi de suite.

systemctl enable postgresql.service #Activer le serveur PostgreSQL
systemctl restart docker #Redémarrez le démon Docker
systemctl stop nginx #Arrêtez Nginx
systemctl status sshd #Vérifiez l'état du démon SSH

Fichier d'unité

Alors, que fait Systemd quand on lui demande de démarrer un processus démon? Il est décrit dans un fichier appelé " Unit File </ b>" sous / etc / systemd / system /.

Par exemple, le contenu du fichier d'unité PostgreSQL est le suivant.

Source: [https://www.postgresql.jp/document/11/html/server-start.html]

[Unit]
Description=PostgreSQL database server
Documentation=man:postgres(1)

[Service]
Type=notify
User=postgres
ExecStart=/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data
ExecReload=/bin/kill -HUP $MAINPID
KillMode=mixed
KillSignal=SIGINT
TimeoutSec=0

(Omission)

Le contenu du fichier d'unité est écrit comme un fichier de configuration Windows (.ini). La commande réellement exécutée est la partie ʻExecStart de la section [Service] `.

ExecStart=/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data

En d'autres termes, Systemd exécute la commande / usr / local / pgsql / bin / postgres -D / usr / local / pgsql / data au démarrage du système d'exploitation. Au fait, comme il est dit ʻUser = postgres au-dessus, cette commande est exécutée en tant qu'utilisateur postgres`.

D'autres incluent ʻAfter, qui spécifie le démon qui doit être démarré avant cette unité, et ʻEnvironment, qui spécifie une variable d'environnement dédiée au démon. L'histoire ici est détaillée ci-dessous.

[https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/system_administrators_guide/sect-managing_services_with_systemd-unit_files:embed:cite]

Vous pouvez également afficher une liste de fichiers unitaires avec systemctl list-unit-files.

Résumé

Cette fois, j'ai résumé systemd, qui jouait en fait un rôle important sous Linux. De nos jours, il est courant d'utiliser Docker ou Kubernetes pour mettre à l'échelle et surveiller par conteneur ou pod pour publier le service, mais lors de l'installation des appareils achetés, etc., en fonction de l'élément. Vous pouvez être obligé d'utiliser un tel systemd. Si quelque chose ne va pas là-bas, c'est un problème si vous ne pouvez pas y faire face, il est donc important de le vérifier correctement.

Recommended Posts