[LINUX] Ich habe richtig über Systemd gelernt

Einführung

Wann immer ich einen CentOS-Server bei der Arbeit starten und in eine Datenbank oder Appliance einfügen und ausführen möchte Zum Beispiel, wenn es PostgreSQL war

systemctl enable postgresql
systemctl start postgresql

Und wenn es sich um einen Docker-Daemon handelt

systemctl enable docker
systemctl start docker

Ich mache. Ich habe diesen "systemctl" -Befehl verwendet, ohne darüber nachzudenken. Ich habe die Möglichkeit, es richtig zu untersuchen, deshalb werde ich es hier zusammenfassen.

Hauptthema

Damons und Dienstleistungen

Der auf dem Betriebssystem ausgeführte Prozess kann grob unterteilt werden.

Es gibt. Ersteres ist zum Beispiel

python hello.py
./start.sh
make install

Gilt für. Da der Benutzer es startet, wird es Benutzerprozess </ b> genannt. Sie können den laufenden Prozess überprüfen, indem Sie den Befehl ps ausführen.

Letzteres ist ein Prozess, der vom System gestartet wird, wenn das Betriebssystem gestartet wird und im Hintergrund ausgeführt wird. Dieser wird als -Dämon </ b> bezeichnet. Zu den bekannten gehören Datenbanken wie postgresql und mysql, Reverse-Proxys wie httpd und nginx sowie andere Appliances wie Jenkins und Github.

systemd

systemd ist ein Prozess, der diese Daemons startet und den Prozess beim Starten des Betriebssystems verwaltet. Der Befehl systemctl greift auf dieses systemd zu, um den Daemon zu starten / stoppen, zu überwachen und so weiter.

systemctl enable postgresql.service #Aktivieren Sie den PostgreSQL-Server
systemctl restart docker #Starten Sie den Docker-Daemon neu
systemctl stop nginx #Stoppen Sie Nginx
systemctl status sshd #Überprüfen Sie den Status des SSH-Dämons

Einheitendatei

Was macht Systemd eigentlich, wenn es aufgefordert wird, einen Daemon-Prozess zu starten? Es wird in einer Datei mit dem Namen " Unit File </ b>" unter "/ etc / systemd / system /" beschrieben.

Der Inhalt der PostgreSQL-Einheitendatei lautet beispielsweise wie folgt.

Quelle: [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

(Unterlassung)

Der Inhalt der Gerätedatei wird wie eine Windows-Konfigurationsdatei (.ini) geschrieben. Der tatsächlich auszuführende Befehl ist der ExecStart-Teil des Abschnitts [Service].

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

Mit anderen Worten, Systemd führt beim Start des Betriebssystems den Befehl "/ usr / local / pgsql / bin / postgres -D / usr / local / pgsql / data" aus. Übrigens, wie oben "User = postgres" steht, wird dieser Befehl als "postgres" -Benutzer ausgeführt.

Es gibt auch "After", das den Daemon angibt, der vor dieser Einheit gestartet werden muss, und "Environment", das die Umgebungsvariable angibt, die dem Daemon zugeordnet ist. Die Geschichte hier ist unten detailliert.

[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]

Sie können auch eine Liste von Einheitendateien mit systemctl list-unit-files anzeigen.

Zusammenfassung

Dieses Mal habe ich systemd zusammengefasst, das unter Linux tatsächlich eine wichtige Rolle spielte. Heutzutage ist es üblich, Docker oder Kubernetes zu verwenden, um den Dienst nach Container oder Pod zu skalieren und zu überwachen, jedoch bei der Installation gekaufter Appliances usw., je nach Artikel Möglicherweise müssen Sie ein solches System verwenden. Wenn dort etwas schief geht, ist es ein Problem, wenn Sie nicht damit umgehen können. Daher ist es wichtig, es ordnungsgemäß zu überprüfen.

Recommended Posts