Après la mise à niveau 14.04 vers 16.04.1, le serveur Postgresql ne démarre pas

24

Je viens de mettre à jour mon système à partir du 14.04. LTS à 16.04.1 LTS, postgresql ne démarre pas sur 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 

Semble que le script systemd contient des données incorrectes:

# 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

Quel devrait être le script correct pour postgresql?

Artur Eshenbrener
la source

Réponses:

9

Cela devrait fonctionner immédiatement si vous fournissez la version et le nom de cluster corrects.

Disons que vous exécutez la version 9.5et que le cluster est appelé main:

Début: systemctl start [email protected]

Arrêtez: systemctl stop [email protected]

Statut: systemctl status [email protected]

Activer le démarrage automatique au démarrage: systemctl enable [email protected]

Désactiver le démarrage automatique au démarrage: 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.
malte
la source
Peut prouver que c'est du travail. Comment puis-je configurer systemd pour démarrer automatiquement cela?
Artur Eshenbrener
1
systemctl enable [email protected]est tout ce dont vous avez besoin.
malte
1
Nous venons de mettre à jour postgresql de 9,6 à 10,0 et nous avons de nouveau rencontré ce problème. J'ai essayé votre solution et pouvez prouver: cela fonctionne.
Artur Eshenbrener
Extrait de la réponse de Kemin ci-dessous: vous pouvez utiliser par exemple systemctl edit [email protected]pour créer un fichier de substitution avec des directives systemd telles que: [Service] Nice = 15 IOSchedulingClass = 2 IOSchedulingPriority = 7
GreenReaper
14

Systemd devrait utiliser le script de /etc/init.d. Au lieu de cela, systemd utilise une sorte de fichier modèle. Pour résoudre ce problème, procédez comme suit:

  1. Supprimer le script de service non valide:

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

  2. Recharger les scripts du démon:

    # systemctl daemon-reload

  3. Activer le service postgresql:

    # systemctl enable postgresql

Après cela, vous seriez en mesure de commencer postgres avec des variantes préférées: sudo systemctl start postgresql, sudo service postgresql startou sudo /etc/init.d/postgresql start. Pour vérifier que postgresql fait exécuter, s'il vous plaît vérifier l'état du service: sudo systemctl status postgresql. Cela devrait ressembler à:

% 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
la source
1
Cela doit être faux. Systemd fait le travail. Il démarre très bien mon cluster 9.3; il ne démarre tout simplement pas mon cluster 9.5. Ce n'est pas un script de service invalide , c'est un script cible , qu'ils ont appelé un service pour le rendre rechargeable. Les hacks laids ne semblent pas être la bonne façon de le faire non plus, mais cela devrait vraiment faire systemctl _action_ postgresql@_version_courir
Auspex
Je ne sais pas si c'est un vilain hack (c'est probablement le cas), mais j'ai eu le même problème avec postfix et cette réponse semble résoudre mon problème.
décibyte
Sur le système, activez postgresql, j'ai eu l'erreur suivante: postgresql.service n'est pas un service natif, redirigeant vers systemd-sysv-install Exécution de / lib / systemd / systemd-sysv-install enable postgresql insserv: fopen (.depend.stop): autorisation nie insserv: fopen (.depend.stop): autorisation refusée. Apparemment, cela ne fonctionne pas avec ma configuration.
Kemin Zhou
1

J'ai eu le même problème après avoir purgé postges9 et installé 10 sur mon ubuntu16. Initialement, j'ai édité le fichier /lib/systemd/system/postgresql.service avec le contenu suivant:

[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

Et je peux utiliser systemctl restart / stop / start pour contrôler le service postgresql. Cependant, pour une raison quelconque, le fichier ci-dessus a été écrasé (peut-être après la mise à jour du système) et je ne pouvais plus exécuter la commande systemctl pour démarrer et arrêter le serveur postgresql. Après quelques lectures, j'ai réalisé que vous n'êtes pas censé éditer le fichier ci-dessus. Au lieu de cela, vous devez utiliser systemctl edit foo pour remplacer les valeurs par défaut. Après avoir suivi la solution suggérée par le lien suivant, mon système semble fonctionner correctement avec postgresql.

Comment remplacer ou configurer les services systemd?

Kemin Zhou
la source
-2

Ce n'est pas la meilleure solution, mais cela résout le problème sans avoir à plonger dans quoi que ce soit. Ajoutez ceci à cron:

@reboot sleep 5; systemctl start postgresql
user3136936
la source