
Ich entwickle ein Systemd-Shutdown-Skript (Unit-Datei) für eine PostgreSQL-Datenbank und bin den beiden folgenden Beiträgen gefolgt, habe es aber nicht zum Laufen gebracht.
Wie führe ich direkt vor dem Herunterfahren ein Skript mit systemd aus?
Folgendes mache ich mit meiner PostgreSQL-Installation: Ich habe ein Startskript geschrieben, das den PostgreSQL-Datenbankcluster beim Booten startet, aber das unten gezeigte Herunterfahrskript scheint beim Herunterfahren nicht zu funktionieren. Es funktioniert jedoch einwandfrei, wenn ich es mit systemctl start service_name ausführe.
Als ich mir das Datenbankprotokoll ansah, konnte ich die Meldung „LOG: Smart Shutdown-Anforderung empfangen“ sehen. Dies ist die Meldung, wenn der Datenbankcluster im normalen Modus herunterfährt. Dies ist das, was das herunterfahrende Betriebssystem tut, wenn ich den Host mit „shutdown -h now“ herunterfahre. Was ich sehen möchte, ist „LOG: Fast Shutdown-Anforderung empfangen“. Dies ist ein schnelles Herunterfahren (im Sofortmodus), das auftritt, wenn ich das Skript mit „systemctl start service_name“ ausführe.
Hier ist die Unit-Dateidefinition
[Unit]
Description=Database Shutdown
Before=shutdown.target reboot.target halt.target
DefaultDependencies=no
[Service]
ExecStart=/usr/bin/su - postgres -c "/opt/postgres-95/bin/pg_ctl -D /database/inst1/data -w stop &"
Type=oneshot
RemainAfterExit=yes
[Install]
WantedBy=shutdown.target
Ich habe auch versucht, den Abschnitt zu löschen, [Install]
aber das Systemctl ließ mich den Dienst ohne den [Install]
Abschnitt nicht aktivieren. Kann mir bitte jemand den richtigen Weg weisen?
Antwort1
systemd
ist so konzipiert, dass dieser Fall sauber behandelt wird. Sie können dies tun, indem Sie eine kleine Datei erstellen, die einen Befehl angibt, den Sie beim Stoppen des PostgreSQL-Dienstes ausführen möchten. Erstellen Sie zunächst ein Verzeichnis mit dem Namen:
/etc/systemd/system/postgresql.d/
Erstellen Sie darin eine Datei mit einem beliebigen Namen, der auf endet .conf
, z. B. custom-shutdown.conf
. Fügen Sie dieser Datei ein paar Zeilen wie diese hinzu:
[Service]
ExecStop=/usr/bin/su - postgres -c "/opt/postgres-95/bin/pg_ctl -D /database/inst1/data -w stop &"
ExecStopPost=
Je nach Fall können Sie es verwenden .
Siehe offizielle Dokumente fürErweitern der Standardkonfigurationund auch offizielle Dokumente für dieExecStop=
Und ExecStopPost=
.