¿Cómo detiene bien todos los procesos de postgres con pg_ctl
(o de otra manera), cuando no recuerda cuál es el directorio de la base de datos, ni tiene definida la variable de entorno PGDATA?
fuente
¿Cómo detiene bien todos los procesos de postgres con pg_ctl
(o de otra manera), cuando no recuerda cuál es el directorio de la base de datos, ni tiene definida la variable de entorno PGDATA?
Es seguro:
sudo pkill -u postgres
Eso mata todos los procesos que se ejecutan como usuario postgres
. O:
pkill postgres
Eso mata todos los procesos llamados 'postgres'.
No , no utilizar kill -9
( kill -KILL
). Simplemente kill
(sin opciones) hace un SIGTERM
, que es lo que quieres.
Alternativamente, puede verificar la ubicación de pgdata si puede conectarse a PostgreSQL. Por ejemplo:
sudo -u postgres psql -c "SHOW data_directory";
... o marcando sus variables de entorno en donde identificas al administrador de correo . Busque el que es el padre de los otros procesos. Por ejemplo:/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
Su datadir generalmente se mostrará en su línea de comando.
Me pone nervioso ver a kill y postgres en el mismo comando. Para responder la pregunta usando solo pg_ctl
, eso sería:
pg_ctl -D $(psql -Xtc 'show data_directory') stop
El argumento -X dice que ignore el .psqlrc
archivo. Esto es útil si tiene psql configurado para emitir el tiempo que tarda una consulta (a través del comando \ timing).
El argumento -t dice que elimine el nombre de la columna en la parte superior de la salida y el número total de filas producidas.
El argumento -c contiene el código SQL que se ejecutará.
Ejecutar un bare psql -c 'show data_directory'
probablemente producirá el siguiente resultado:
data_directory
--------------------------
/path/to/postgresql/data
(1 row)
Por lo tanto, hacer un backticking esto $( ... )
entregará /path/to/postgresql/data
el argumento -D de pg_ctl, que luego detendrá la base de datos de manera ordenada.
PGDATA
variable de entorno. Mi intento de ejecutar este comando resultó en un error ya que no había tal base de datos con mi nombre de usuario de Linux.show data_directory
puede ejecutarse sin especificar una base de datos, y de hecho ninguno de mis servidores tiene una base de datos a mi nombre. Tampoco requiere PGDATA, por lo que no puedo explicar su falla.Este trabajo para mí ref. https://stackoverflow.com/a/5408501/248616
fuente