Nach dem Upgrade von 14.04 auf 16.04.1 wird der Postgresql-Server nicht gestartet

24

Habe gerade mein System von 14.04 aufgerüstet. LTS bis 16.04.1 LTS, postgresql startet nicht auf 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 

Scheint, dass das systemd-Skript falsche Daten enthält:

# 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

Was sollte das richtige Skript für postgresql sein?

Artur Eshenbrener
quelle

Antworten:

9

Dies sollte sofort funktionieren, wenn Sie die richtige Version und den richtigen Clusternamen angeben.

Nehmen wir an, Sie führen die Version aus 9.5und der Cluster heißt main:

Start: systemctl start [email protected]

Halt: systemctl stop [email protected]

Status: systemctl status [email protected]

Autostart beim Booten aktivieren: systemctl enable [email protected]

Autostart beim Booten deaktivieren: 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
quelle
Kann beweisen, dass dies Arbeit ist. Wie kann ich systemd einrichten, um dies automatisch zu starten?
Artur Eshenbrener
1
systemctl enable [email protected]ist alles, was du brauchst.
Malte
1
Habe gerade postgresql von 9.6 auf 10.0 aktualisiert und bin erneut auf dieses Problem gestoßen. Versuchte deine Lösung und kann beweisen: es funktioniert.
Artur Eshenbrener
Gewonnen aus Kemin Antwort unten: Sie zB verwenden können , systemctl edit [email protected]eine Überschreibung Datei mit systemd Richtlinien wie zu erstellen: [Service] Nizza = 15 IOSchedulingClass = 2 IOSchedulingPriority = 7
GreenReaper
14

Systemd sollte Skript von verwenden /etc/init.d. Stattdessen verwendet systemd eine Art Vorlagendatei. Gehen Sie folgendermaßen vor, um das zu beheben:

  1. Ungültiges Dienstskript entfernen:

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

  2. Daemon-Skripte neu laden:

    # systemctl daemon-reload

  3. Postgresql-Dienst aktivieren:

    # systemctl enable postgresql

Danach würden Sie in der Lage sein , Postgres mit allen möglichen bevorzugten Varianten zu starten: sudo systemctl start postgresql, sudo service postgresql startoder sudo /etc/init.d/postgresql start. Um sicherzustellen, dass postgresql tatsächlich laufen zu überprüfen, überprüfen Sie bitte den Status des Service: sudo systemctl status postgresql. Es sieht so aus:

% 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
quelle
1
Das muss falsch sein. Systemd funktioniert . Der Start meines 9.3-Clusters ist in Ordnung. Mein 9.5-Cluster wird einfach nicht gestartet. Es ist nicht ein ungültiger Service - Skript, es ist ein Ziel Skript, dass sie einen genannt hat Dienst , um es wiederaufladbar zu machen. Hässliche Hacks scheinen auch nicht der richtige Weg zu sein, aber es sollte wirklich dazu führen systemctl _action_ postgresql@_version_, dass sie ausgeführt werden
Auspex
Ich weiß nicht, ob dies ein hässlicher Hack ist (es ist wahrscheinlich), aber ich hatte das gleiche Problem mit Postfix und diese Antwort scheint mein Problem zu lösen.
Dezibyte
Bei der Systemaktivierung von postgresql wurde folgende Fehlermeldung angezeigt: postgresql.service ist kein systemeigener Dienst, der nach systemd-sysv-install umgeleitet wird insserv verweigert: fopen (.depend.stop): Berechtigung verweigert. Anscheinend funktioniert das mit meinem Setup nicht.
Kemin Zhou
1

Ich hatte das gleiche Problem, nachdem ich postges9 gelöscht und 10 auf meinem ubuntu16 installiert hatte. Anfangs habe ich die Datei /lib/systemd/system/postgresql.service mit folgendem Inhalt bearbeitet:

[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

Und ich kann mit systemctl restart / stop / start den postgresql-Dienst steuern. Aus irgendeinem Grund wurde die obige Datei jedoch überschrieben (möglicherweise nach einer Systemaktualisierung) und ich konnte den Befehl systemctl nicht mehr ausführen, um den postgresql-Server zu starten und zu stoppen. Nach einigem Lesen wurde mir klar, dass Sie die obige Datei nicht bearbeiten sollen. Verwenden Sie stattdessen systemctl edit foo, um die Standardeinstellungen zu überschreiben. Nachdem ich der über den folgenden Link vorgeschlagenen Lösung gefolgt bin, scheint mein System ordnungsgemäß mit postgresql zu funktionieren.

Wie kann ich systemd-Dienste überschreiben oder konfigurieren?

Kemin Zhou
quelle
-2

Nicht die schönste Lösung, aber das löst das Problem, ohne in irgendetwas eintauchen zu müssen. Fügen Sie dies zu cron hinzu:

@reboot sleep 5; systemctl start postgresql
user3136936
quelle