Wie können Sie alle Postgres-Prozesse mit pg_ctl
(oder auf andere Weise) stoppen , wenn Sie sich nicht an das Datenbankverzeichnis erinnern oder die PGDATA-Umgebungsvariable nicht definiert haben?
quelle
Wie können Sie alle Postgres-Prozesse mit pg_ctl
(oder auf andere Weise) stoppen , wenn Sie sich nicht an das Datenbankverzeichnis erinnern oder die PGDATA-Umgebungsvariable nicht definiert haben?
Es ist sicher zu:
sudo pkill -u postgres
Das beendet alle Prozesse, die als Benutzer ausgeführt werden postgres
. Oder:
pkill postgres
Damit werden alle Prozesse mit dem Namen "postgres" abgebrochen.
Verwenden Sie nichtkill -9
( kill -KILL
). Einfach kill
(ohne Optionen) ein machen SIGTERM
, was du willst.
Alternativ können Sie den pgdata-Speicherort überprüfen, wenn Sie eine Verbindung zu PostgreSQL herstellen können. Beispielsweise:
sudo -u postgres psql -c "SHOW data_directory";
... oder indem Sie seine Umgebungsvariablen einchecken , mit denen Sie den Postmaster identifizieren . Suchen Sie nach dem, der den anderen Prozessen übergeordnet ist. Beispielsweise:/proc/[postmaster pid]/environ
ps -fHC postgres
postgres
postgres 794 1 0 Nov06 ? 00:00:03 /usr/pgsql-9.3/bin/postgres -D /var/lib/pgsql/9.3/data -p 5432
postgres 857 794 0 Nov06 ? 00:00:00 postgres: logger process
postgres 871 794 0 Nov06 ? 00:00:00 postgres: checkpointer process
postgres 872 794 0 Nov06 ? 00:00:00 postgres: writer process
postgres 873 794 0 Nov06 ? 00:00:00 postgres: wal writer process
postgres 874 794 0 Nov06 ? 00:00:03 postgres: autovacuum launcher process
postgres 875 794 0 Nov06 ? 00:00:07 postgres: stats collector process
Der Datadir wird in der Regel in der Befehlszeile angezeigt.
Es macht mich nervös, wenn ich sehe, dass Kill und Postgres im selben Kommando sind. Um die Frage nur mit zu beantworten pg_ctl
, wäre das:
pg_ctl -D $(psql -Xtc 'show data_directory') stop
Das Argument -X besagt, dass die .psqlrc
Datei ignoriert werden soll. Dies ist nützlich, wenn Sie psql so konfiguriert haben, dass die von einer Abfrage benötigte Zeit ausgegeben wird (über den Befehl \ timing).
Das Argument -t besagt, dass der Spaltenname am oberen Rand der Ausgabe und die Gesamtzahl der produzierten Zeilen entfernt werden sollen.
Das Argument -c enthält den auszuführenden SQL-Code.
Wenn Sie ein Bare ausführen, psql -c 'show data_directory'
wird wahrscheinlich die folgende Ausgabe ausgegeben:
data_directory
--------------------------
/path/to/postgresql/data
(1 row)
Daher diese durch backticking $( ... )
liefern /path/to/postgresql/data
an das Argument -D von pg_ctl, die dann die Datenbank in geordneter Weise zu stoppen.
PGDATA
Umgebungsvariablen zu erläutern . Mein Versuch, diesen Befehl auszuführen, schlug fehl, da unter meinem Linux-Benutzernamen keine solche Datenbank vorhanden war.show data_directory
kann ohne Angabe einer Datenbank ausgeführt werden, und in der Tat hat keiner meiner Server eine Datenbank in meinem Namen. PGDATA ist nicht erforderlich, daher kann ich Ihr Versagen nicht erklären.Diese Arbeit für mich ref. https://stackoverflow.com/a/5408501/248616
quelle