Ich bin dabei, den PostgreSQL 12-Dienst unter Ubuntu 18 neu zu starten. Zuerst überprüfe ich seinen Status: sudo service postgresql status
. Dort steht:
postgresql.service - PostgreSQL RDBMS
Loaded: loaded (/lib/systemd/system/postgresql.service; disabled; vendor pres
Active: inactive (dead)
lines 1-3/3 (END)...skipping...
postgresql.service - PostgreSQL RDBMS
Loaded: loaded (/lib/systemd/system/postgresql.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Es scheint zwar inaktiv zu sein, aber ich kann trotzdem eine Verbindung herstellen.
Dann führe ich eine weitere Prüfung durch: systemctl status postgresql@12-main
. es heißt:
root@db-services:/# systemctl status postgresql@12-main
● [email protected] - PostgreSQL Cluster 12-main
Loaded: loaded (/etc/systemd/system/[email protected]; enabled; vendor preset: enabled)
Drop-In: /etc/systemd/system/[email protected]
└─override.conf
Active: active (running) since Mon 2022-06-13 09:02:25 WIB; 5 months 27 days ago
Main PID: 5807 (postgres)
Tasks: 86 (limit: 4915)
CGroup: /system.slice/system-postgresql.slice/[email protected]
├─ 1586 postgres: 12/main: postgres db_sync 10.100.3.248(61414) idle
├─ 1588 postgres: 12/main: postgres db_sync 10.100.3.248(61415) idle
├─ 1606 postgres: 12/main: docreg db_docreg 10.100.8.150(18385) idle
├─ 1607 postgres: 12/main: docreg db_docreg 10.100.8.150(18399) idle
├─ 1608 postgres: 12/main: docreg db_docreg 10.100.8.150(18401) idle
├─ 1609 postgres: 12/main: docreg db_docreg 10.100.8.150(18421) idle
├─ 2592 postgres: 12/main: docudigtl db_docudigtl 10.100.8.112(34956) idle
├─ 3518 postgres: 12/main: docudigtl db_docudigtl 127.0.0.1(48290) idle
├─ 5150 postgres: 12/main: docudigtl db_docudigtl 10.100.7.114(61504) idle
├─ 5807 /usr/lib/postgresql/12/bin/postgres -D /data/postgresql/12/main -c config_file=/etc/postgresql/12/main/postgresql.co
├─ 5883 postgres: 12/main: docudigtl db_docudigtl 127.0.0.1(48626) idle
├─ 6316 postgres: 12/main: docudigtl db_docudigtl 127.0.0.1(48704) idle
├─ 7049 postgres: 12/main: docudigtl db_docudigtl 127.0.0.1(48870) idle
├─ 7986 postgres: 12/main: docudigtl db_docudigtl 10.100.7.114(56240) idle
├─ 8146 postgres: 12/main: docudigtl db_docudigtl 10.100.8.114(47432) idle
├─ 8183 postgres: 12/main: docudigtl db_docudigtl 127.0.0.1(49022) idle
├─ 8360 postgres: 12/main: docudigtl db_docudigtl 127.0.0.1(49036) idle
├─ 8445 postgres: 12/main: docudigtl db_docudigtl 10.100.8.114(47478) idle
├─ 9590 postgres: 12/main: docudigtl db_docudigtl 10.100.8.106(56094) idle
├─ 9687 postgres: 12/main: docudigtl db_docudigtl 10.100.8.112(50980) idle
├─10148 postgres: 12/main: docudigtl db_docudigtl 127.0.0.1(40646) idle
├─10324 postgres: 12/main: docudigtl db_docudigtl 127.0.0.1(40680) idle
├─11079 postgres: 12/main: docudigtl db_docudigtl 127.0.0.1(49496) idle
├─11602 postgres: 12/main: docudigtl db_docudigtl 127.0.0.1(58152) idle
├─11886 postgres: 12/main: docudigtl db_docudigtl 127.0.0.1(44674) idle
├─12106 postgres: 12/main: docudigtl db_docudigtl 127.0.0.1(49618) idle
├─13112 postgres: 12/main: docudigtl db_docudigtl 10.100.6.145(55014) idle
├─13122 postgres: 12/main: docudigtl db_docudigtl 10.100.6.145(55015) idle
├─13145 postgres: 12/main: docudigtl db_mysapk 10.100.6.145(55016) idle
├─13202 postgres: 12/main: docudigtl db_docudigtl 10.100.7.114(62073) idle
├─13945 postgres: 12/main: checkpointer
├─13946 postgres: 12/main: background writer
├─13947 postgres: 12/main: walwriter
├─13948 postgres: 12/main: autovacuum launcher
├─13949 postgres: 12/main: stats collector
├─13950 postgres: 12/main: logical replication launcher
Es ist also tatsächlich aktiv!
- Was ist der Unterschied zwischen den beiden Befehlen?
- Welches soll ich für den Neustart verwenden:
systemctl restart postgresql@12-main
ODERsudo service postgresql restart
?
Antwort1
Es gibt spezielle systemd-Dienste, dieVorlagendienste.
Ein Vorlagendienst kann ein Argument wie dieses annehmen: template_service@argument
.
Ein Vorlagendienst wird nie selbst gestartet, kann aber mit einem bestimmten Argument instanziiert werden. Dies bedeutet, dass derselbe (Vorlagen-)Dienst in mehreren Instanzen ausgeführt werden kann, die jeweils durch ihr Argument identifiziert werden. Beispiel:
systemctl starte template_service@a
systemctl starte template_service@b
systemctl starte template_service@c
In Debian und einigen abgeleiteten Distributionen (wie Ubuntu):
Jede PostgreSQL-Instanz (Cluster) gehört zu einem instantiierten postgresql@
Vorlagendienst. Das Argument für den postgresql@
Dienst hat die Form version-clustername
.
Dies ist beispielsweise postgresql@12-main
ein systemd-Dienst, der eine PostgreSQL 12-Serverinstanz (Cluster) mit dem Clusternamen main
(der der Standard ist) darstellt.
Es gibt einen weiteren systemd-Dienst, der einfach heißt postgresql
. Dies ist eine Art Catch-All-Dienst. Wenn Sie ihn starten oder stoppen, werden alle PostgreSQL-Instanzen gestartet oder gestoppt (dieses Verhalten kann deaktiviert werden instart.conf
).
Sie können jedoch nicht systemctl status postgresql
überprüfen, ob PostgreSQL-Dienste ausgeführt werden, selbst wenn in Ihrem System nur ein einziger PostgreSQL-Server eingerichtet ist. Sie sollten immer den Status des jeweiligen instanziierten Dienstes überprüfen, um einen aussagekräftigen Statusbericht zu erhalten.
Derservice
Der Befehl wurde für das alte Init-System (SysV-Init) verwendet, bevor systemd eingeführt wurde. Er funktioniert aus Gründen der Abwärtskompatibilität immer noch, aber Sie sollten den systemctl
Befehl unbedingt auf Systemen verwenden, auf denen systemd verfügbar ist.