Después de la actualización 14.04 a 16.04.1, el servidor Postgresql no se inicia

24

Acabo de actualizar mi sistema desde 14.04. LTS a 16.04.1 LTS, postgresql no se inicia en systemd:

/etc/init.d/postgresql start                                                                                                                                                                              
[ ok ] Starting postgresql (via systemctl): postgresql.service

# /etc/init.d/postgresql status                                                                                                                                                                             
● postgresql.service - PostgreSQL RDBMS
  Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor     preset: enabled)
  Active: active (exited) since Вт 2016-08-09 13:40:51 MSK; 3min 23s ago
  Process: 23142 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
  Main PID: 23142 (code=exited, status=0/SUCCESS)Seems that 

Parece que el script systemd contiene datos incorrectos:

# cat /lib/systemd/system/postgresql.service                                                                                                                                                                
# systemd service for managing all PostgreSQL clusters on the system. This
# service is actually a systemd target, but we are using a service since
# targets cannot be reloaded.

[Unit]
Description=PostgreSQL RDBMS

[Service]
Type=oneshot
ExecStart=/bin/true
ExecReload=/bin/true
RemainAfterExit=on

[Install]
WantedBy=multi-user.target

¿Cuál debería ser el script correcto para postgresql?

Artur Eshenbrener
fuente

Respuestas:

9

Esto debería funcionar de inmediato si proporciona la versión correcta y el nombre del clúster.

Digamos que está ejecutando la versión 9.5y el clúster se llama main:

Comienzo: systemctl start [email protected]

Detener: systemctl stop [email protected]

Estado: systemctl status [email protected]

Habilite el inicio automático en el arranque: systemctl enable [email protected]

Deshabilitar el inicio automático en el arranque: systemctl disable [email protected]

foo@postgres:~$ systemctl status [email protected][email protected] - PostgreSQL Cluster 9.5-main
   Loaded: loaded (/lib/systemd/system/[email protected]; disabled; vendor preset: enabled)
   Active: active (running) since Fri 2017-03-31 17:44:46 CEST; 59s ago
   Main PID: 4546 (postgres)
   CGroup: /system.slice/system-postgresql.slice/[email protected]
           ├ ─ 4546 /usr/lib/postgresql/9.5/bin/postgres -D /var/lib/postgresql/9.5/main -c config_file=/etc/postgresql/9.5/main/postgresql.conf
           ├ ─ 4548 postgres: checkpointer process
           ├ ─ 4549 postgres: writer process
           ├ ─ 4550 postgres: wal writer process
           ├ ─ 4551 postgres: autovacuum launcher process
           └ ─ 4552 postgres: stats collector process

Mar 31 17:44:44 postgres postgres[4546]: [1-2] 2017-03-31 17:44:44 CEST [4546] @ HINT:  Future log output will go to log destination "syslog".
Mar 31 17:44:44 postgres postgres[4547]: [2-1] 2017-03-31 17:44:44 CEST [4547] @ LOG:  database system was shut down at 2017-03-31 17:44:43 CEST
Mar 31 17:44:44 postgres postgres[4547]: [3-1] 2017-03-31 17:44:44 CEST [4547] @ LOG:  MultiXact member wraparound protections are now enabled
Mar 31 17:44:44 postgres postgres[4546]: [2-1] 2017-03-31 17:44:44 CEST [4546] @ LOG:  database system is ready to accept connections
Mar 31 17:44:44 postgres postgres[4551]: [2-1] 2017-03-31 17:44:44 CEST [4551] @ LOG:  autovacuum launcher started
Mar 31 17:44:45 postgres postgres[4553]: [3-1] 2017-03-31 17:44:45 CEST [4553] [unknown]@[unknown] LOG:  incomplete startup packet
Mar 31 17:44:46 postgres systemd[1]: Started PostgreSQL Cluster 9.5-main.
Mar 31 17:44:47 postgres systemd[1]: Reloading PostgreSQL Cluster 9.5-main.
Mar 31 17:44:47 postgres postgres[4546]: [3-1] 2017-03-31 17:44:47 CEST [4546] @ LOG:  received SIGHUP, reloading configuration files
Mar 31 17:44:47 systemd[1]: Reloaded PostgreSQL Cluster 9.5-main.
malta
fuente
Puede probar que esto es trabajo. ¿Cómo puedo configurar systemd para iniciar esto automáticamente?
Artur Eshenbrener
1
systemctl enable [email protected]es todo lo que necesitas.
malte
1
Acabo de actualizar postgresql de 9.6 a 10.0, y toco este problema nuevamente. Probé su solución y puedo probar: funciona.
Artur Eshenbrener
Extraído de la respuesta de Kemin a continuación: puede usar, por ejemplo, systemctl edit [email protected]para crear un archivo de anulación con directivas systemd como: [Servicio] Nice = 15 IOSchedulingClass = 2 IOSchedulingPriority = 7
GreenReaper
14

Systemd debería usar script de /etc/init.d. En cambio, systemd usa algún tipo de archivo de plantilla. Para arreglar eso, sigue esos pasos:

  1. Eliminar script de servicio no válido:

    # rm /lib/systemd/system/postgresql.service

  2. Recargar scripts de daemon:

    # systemctl daemon-reload

  3. Habilitar el servicio postgresql:

    # systemctl enable postgresql

Después de eso, usted sería capaz de iniciar postgres con cualquiera de las variantes preferidas: sudo systemctl start postgresql, sudo service postgresql starto sudo /etc/init.d/postgresql start. Para comprobar que realmente se ejecutan PostgreSQL, por favor, compruebe el estado de servicio: sudo systemctl status postgresql. Se ve como:

% sudo systemctl status postgresql                                                                                                                                                                          
● postgresql.service - LSB: PostgreSQL RDBMS server
   Loaded: loaded (/etc/init.d/postgresql; bad; vendor preset: enabled)
   Active: active (running) since Пт 2016-08-12 10:13:43 MSK; 1h 37min ago
     Docs: man:systemd-sysv-generator(8)
   CGroup: /system.slice/postgresql.service
           ├─4086 /usr/lib/postgresql/9.5/bin/postgres -D     /var/lib/postgresql/9.5/main -c  config_file=/etc/postgresql/9.5/main/postgresql.conf
           ├─4099 postgres: checkpointer process                                                                                              
           ├─4100 postgres: writer process                                                                                                    
           ├─4101 postgres: wal writer process                                                                                                
           ├─4102 postgres: autovacuum launcher process                                                                                       
           └─4103 postgres: stats collector process                                                                                           

авг 12 10:13:40 ubuntu-precise systemd[1]: Starting LSB: PostgreSQL RDBMS server...
авг 12 10:13:40 ubuntu-precise postgresql[4009]:  * Starting PostgreSQL 9.5 database server
авг 12 10:13:43 ubuntu-precise postgresql[4009]:    ...done.
авг 12 10:13:43 ubuntu-precise systemd[1]: Started LSB: PostgreSQL RDBMS server.
Artur Eshenbrener
fuente
1
Eso tiene que estar mal. Systemd hace el trabajo. Ha estado iniciando mi clúster 9.3 muy bien; simplemente no iniciará mi clúster 9.5. No es una secuencia de comandos de servicio no válida , es una secuencia de comandos de destino , que han llamado un servicio para que sea recargable. Los trucos feos tampoco parecen ser la forma correcta de hacerlo, pero realmente debería hacer systemctl _action_ postgresql@_version_que se ejecute
Auspex
No sé si este es un truco feo (probablemente lo sea), pero tuve el mismo problema con postfix y esta respuesta parece resolver mi problema.
decibyte
En thesystemctl enable postgresql recibí el siguiente error: postgresql.service no es un servicio nativo, redirigiendo a systemd-sysv-install Ejecutando / lib / systemd / systemd-sysv-install enable postgresql insserv: fopen (.depend.stop): Permiso denegado insserv: fopen (.depend.stop): permiso denegado. Aparentemente esto no funciona con mi configuración.
Kemin Zhou
1

Tuve el mismo problema después de purgar postges9 e instalé 10 en mi ubuntu16. Inicialmente edité el archivo /lib/systemd/system/postgresql.service con el siguiente contenido:

[Unit]
Description=PostgreSQL RDBMS

[Service]
Type=notify
User=postgres
ExecStart=/usr/lib/postgresql/10/bin/postgres -D /analysis2/postgresql/data
ExecReload=/bin/kill -HUP $MAINPID
KillMode=mixed
KillSignal=SIGINT
TimeoutSec=0

[Install]
WantedBy=multi-user.target

Y puedo usar systemctl restart / stop / start para controlar el servicio postgresql. Sin embargo, por alguna razón, el archivo anterior se sobrescribió (tal vez después de la actualización del sistema) y no pude ejecutar el comando systemctl para iniciar y detener más el servidor postgresql. Después de leer un poco, me di cuenta de que se supone que no debes editar el archivo anterior. En su lugar, debe usar systemctl edit foo para sobrescribir los valores predeterminados. Después de seguir la solución sugerida por el siguiente enlace, mi sistema parece estar funcionando correctamente con postgresql.

¿Cómo anulo o configuro los servicios systemd?

Kemin Zhou
fuente
-2

No es la mejor solución, pero esto resuelve el problema sin tener que sumergirse en nada. Agregue esto a cron:

@reboot sleep 5; systemctl start postgresql
usuario3136936
fuente