GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Verwalten Sie mehrere Dienstinstanzen mit systemctl

Dienstleistungen, Dienstleistungen, Dienstleistungen. Ein Dienst ist ein großer Teil der Datenverarbeitung. Sie lesen diesen Artikel über einen Dienst. Auf Ihrem Computer werden Dienste ausgeführt. Das Internet ist voll davon.

Über systemctl

Unter Linux erfolgt die Ausführung und Verwaltung von Diensten standardmäßig über das Dienstprogramm systemd und den Befehl systemctl . Seine Verwendung ist ziemlich einfach:Sie müssen nur den Namen des Dienstes kennen, den Sie verwalten möchten, dann können Sie diesen Befehl verwenden, um den Dienst zu starten oder zu stoppen, seinen Status zu überprüfen oder andere Funktionen auszuführen:

# systemctl start httpd

# systemctl stop httpd

# systemctl status httpd

Unit-Dateien

Ein Dienst wird in einer Datei namens Unit-Datei definiert. Sie befinden sich in der Regel im Verzeichnis /usr/lib/systemd/system . Hier ist eine Beispielliste:

# ls /usr/lib/systemd/system
 auditd.service                              multi-user.target                    sys-kernel-debug.mount
 [email protected]                             multi-user.target.wants              sys-kernel-tracing.mount
 basic.target                                NetworkManager-dispatcher.service    syslog.socket
 basic.target.wants                          NetworkManager.service               syslog.target.wants
 blk-availability.service                    NetworkManager-wait-online.service  

Manchmal müssen Sie mehr als eine Instanz eines Dienstes auf einem einzigen Host ausführen. Wenn Sie beispielsweise Websites für mehrere Kunden verwalten, verlangen Sicherheitsvorschriften, dass jeder Kunde eine eigene Instanz hat. Das bedeutet, dass Sie für jeden einen neuen Apache HTTP-Dienst ausführen müssen, aber viele Dienste zu haben, kann schwierig zu verwalten sein. Wenn Sie 10 verschiedene Kunden haben, müssten Sie 10 separate Einheitendateien erstellen, um sie zu verwalten. Glücklicherweise gibt es einen besseren Weg, mehrere Instanzen eines Dienstes zu handhaben.

Das @-Symbol

Beachten Sie, dass einige der Unit-Dateien ein @-Symbol in ihrem Namen haben. Dieses Symbol hat eine interessante Bedeutung. Tatsächlich werden Sie nach der Installation von Apache HTTP Server möglicherweise mehrere Service-Unit-Dateien bemerken, darunter eine mit dem @-Symbol im Namen – [email protected] .

Ich werde Ihnen zeigen, wie dies das Leben eines Systemadministrators ein wenig einfacher machen kann, indem ich für dieses Beispiel den Apache HTTP-Server verwende:

# dnf -y install httpd

# cd /usr/lib/systemd/system
# ls -d http*
httpd.service  [email protected]  httpd.service.d  httpd.socket  httpd.socket.d

Das @-Symbol zeigt an, dass eine Ersetzung vorgenommen wird. Systemd nimmt alles, was Sie danach eingeben, und ersetzt die Variable %i in der Service-Unit-Datei. Die Variable ist in diesem Auszug des [email protected] zu sehen Datei:

[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
Documentation=man:[email protected](8)

[Service]
Type=notify
Environment=LANG=C
Environment=HTTPD_INSTANCE=%i
ExecStartPre=/bin/mkdir -m 710 -p /run/httpd/instance-%i
ExecStartPre=/bin/chown root.apache /run/httpd/instance-%i
ExecStartPre=/bin/mkdir -m 700 -p /var/lib/httpd/instance-%i
ExecStartPre=/bin/chown apache.apache /var/lib/httpd/instance-%i
ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND -f conf/%i.conf
ExecReload=/usr/sbin/httpd $OPTIONS -k graceful -f conf/%i.conf

Beachten Sie, dass die standardmäßige httpd-Unit-Datei httpd.service , hat kein @-Symbol im Namen und sieht anders aus. Es wird für eine einzelne grundlegende Standardinstanz des Apache HTTP-Servers verwendet.

Mehrere Instanzen ausführen

Mehr über Systemadministratoren

  • Sysadmin-Blog aktivieren
  • Das automatisierte Unternehmen:ein Leitfaden zur IT-Verwaltung mit Automatisierung
  • eBook:Ansible-Automatisierung für SysAdmins
  • Geschichten aus der Praxis:Ein Leitfaden für Systemadministratoren zur IT-Automatisierung
  • eBook:Ein Leitfaden zu Kubernetes für SREs und Systemadministratoren
  • Neueste Sysadmin-Artikel

Um mehrere Instanzen mit dieser speziellen Unit-Datei auszuführen, benötigt jede einen eindeutigen Namen. Angenommen, Sie haben zwei Kunden, The Little Bank und The Big Bank. Benennen Sie die Instanzen littlebank und bigbank. Um einen zu verwalten, hängen Sie einfach seinen Namen nach dem @-Symbol an. Starten Sie jede Instanz mit dem entsprechenden Befehl:

  • littlebank:systemctl start httpd@littlebank
  • bigbank:systemctl start httpd@bigbank

Beachten Sie, dass die meisten Dienste bestimmte Konfigurationen benötigen, um Konflikte zwischen verschiedenen Instanzen zu vermeiden. Ich werde sie hier nicht alle behandeln, aber Apache benötigt einige Dinge, einschließlich eindeutiger Listen-Port-Nummern, PID-Dateien und Dokument-Roots.

Ich werde es demonstrieren, indem ich versuche, die littlebank-Instanz zu starten. Ich erwarte, dass es fehlschlägt, aber es wird eine nützliche Statusmeldung liefern:

# systemctl start httpd@littlebank

# systemctl status httpd@littlebank
[email protected] - The Apache HTTP Server
     Loaded: loaded (/usr/lib/systemd/system/[email protected]; disabled; vendor preset: disabled)
     Active: failed (Result: exit-code) since Tue 2020-11-10 11:41:20 EST; 1min 58s ago
       Docs: man:[email protected](8)
    Process: 2205 ExecStartPre=/bin/mkdir -m 710 -p /run/httpd/instance-littlebank (code=exited, status=0/SUCCESS)
    Process: 2207 ExecStartPre=/bin/chown root.apache /run/httpd/instance-littlebank (code=exited, status=0/SUCCESS)
    Process: 2208 ExecStartPre=/bin/mkdir -m 700 -p /var/lib/httpd/instance-littlebank (code=exited, status=0/SUCCESS)
    Process: 2209 ExecStartPre=/bin/chown apache.apache /var/lib/httpd/instance-littlebank (code=exited, status=0/SUCCESS)
    Process: 2210 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND -f conf/littlebank.conf (code=exited, status=1/FAILURE)
   Main PID: 2210 (code=exited, status=1/FAILURE)
        CPU: 26ms

Nov 10 11:41:20 localhost.localdomain systemd[1]: Starting The Apache HTTP Server...
Nov 10 11:41:20 localhost.localdomain httpd[2210]: httpd: Could not open configuration file /etc/httpd/conf/littlebank.conf>
Nov 10 11:41:20 localhost.localdomain systemd[1]: [email protected]: Main process exited, code=exited, status=1/FAIL>
Nov 10 11:41:20 localhost.localdomain systemd[1]: [email protected]: Failed with result 'exit-code'.
Nov 10 11:41:20 localhost.localdomain systemd[1]: Failed to start The Apache HTTP Server.

Sie können sehen, dass systemd den Instanznamen korrekt anstelle von %i ersetzt Variable in der Unit-Datei. Apache kann jedoch nicht gestartet werden, da eine Konfigurationsdatei nicht geöffnet werden konnte. Also richte ich jetzt die Instanzen so ein, dass sie die Erstellung der erforderlichen Konfigurationsdateien enthalten (littlebank.conf und bigbank.conf ) in /etc/httpd/conf/ :

# ls /etc/httpd/conf
bigbank.conf  httpd.conf  littlebank.conf

Jetzt können Sie jede Instanz mit systemctl verwalten . Geben Sie start aus und status Befehle an jeden. Ich habe die Ausgabe auf die relevantesten Details gekürzt:

# systemctl start httpd@bigbank
# systemctl start httpd@littlebank

# systemctl status httpd@bigbank
[email protected] - The Apache HTTP Server
     Loaded: loaded (/usr/lib/systemd/system/[email protected]; disabled; vendor preset: disabled)
     Active: active (running) since Tue 2020-11-10 12:26:06 EST; 56min ago
     
# systemctl status httpd@littlebank
[email protected] - The Apache HTTP Server
     Loaded: loaded (/usr/lib/systemd/system/[email protected]; disabled; vendor preset: disabled)
     Active: active (running) since Tue 2020-11-10 12:25:58 EST; 55min ago

Hier ist die Prozessansicht dieser Instanzen. Es gibt mehr als einen, weil Apache Serverprozesse forkt, was es normalerweise tut:

# pgrep -a httpd
2834 /usr/sbin/httpd -DFOREGROUND -f conf/littlebank.conf
2835 /usr/sbin/httpd -DFOREGROUND -f conf/littlebank.conf
2836 /usr/sbin/httpd -DFOREGROUND -f conf/littlebank.conf
3061 /usr/sbin/httpd -DFOREGROUND -f conf/bigbank.conf
3062 /usr/sbin/httpd -DFOREGROUND -f conf/bigbank.conf
3064 /usr/sbin/httpd -DFOREGROUND -f conf/bigbank.conf

Einsetzen

Diese kleine systemd-Funktion ist sehr nützlich, wenn Sie viele Instanzen eines Dienstes benötigen. Ich hoffe, Sie werden es bei Ihrer Arbeit gut gebrauchen können.


Linux
  1. So verwalten Sie mehrere Python-Versionen mit Pyenv unter Linux

  2. So verwenden Sie den Systemctl-Befehl zum Verwalten von Systemd-Diensten

  3. So verwalten Sie Linux-Dienste mit dem Befehl systemctl

  4. Verwenden Sie Systemctl, um Dienste zu verwalten

  5. systemd - Gibt meinem Dienst mehrere Argumente

Installieren Sie mehrere Drupal-Instanzen mit Nginx unter Ubuntu 20.04

Systemctl-Befehle zum Verwalten des Systemd-Dienstes

So verwalten Sie mehrere Java-Versionen mit jEnv unter Linux

Verwalten von cgroups mit systemd

Erste Schritte mit systemctl

So verwenden Sie systemctl unter Linux