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.
Der auf dem Betriebssystem ausgeführte Prozess kann grob unterteilt werden.
Ein Prozess, der durch Eingabe eines Befehls selbst gestartet wird.
Prozesse, die ständig aktiv sind, während das Betriebssystem aktiv ist
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
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.
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