Po aktualizacji 14.04 do 16.04.1 serwer Postgresql nie uruchamia się

24

Właśnie zaktualizowałem swój system z 14.04. LTS do 16.04.1 LTS, postgresql nie uruchamia się na 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 

Wygląda na to, że skrypt systemowy zawiera nieprawidłowe dane:

# 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

Jaki powinien być poprawny skrypt dla postgresql?

Artur Eshenbrener
źródło

Odpowiedzi:

9

Powinno to działać po wyjęciu z pudełka, jeśli podasz poprawną wersję i nazwę klastra.

Załóżmy, że używasz wersji, 9.5a klaster nazywa się main:

Początek: systemctl start [email protected]

Zatrzymać: systemctl stop [email protected]

Status: systemctl status [email protected]

Włącz autostart podczas rozruchu: systemctl enable [email protected]

Wyłącz autostart podczas uruchamiania: 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
źródło
Może udowodnić, że to jest praca. Jak skonfigurować systemd, aby automatycznie to uruchamiał?
Artur Eshenbrener
1
systemctl enable [email protected]to wszystko czego potrzebujesz.
malte
1
Właśnie zaktualizowałem postgresql z 9.6 do 10.0 i ponownie uderzyłem w ten problem. Wypróbowałem swoje rozwiązanie i mogę udowodnić: działa.
Artur Eshenbrener
Pochodzących z odpowiedzią Kemin jest poniżej: można użyć na przykład systemctl edit [email protected]utworzyć plik override z Systemd dyrektyw, takich jak: [Usługi] Nicea = 15 = 2 IOSchedulingPriority IOSchedulingClass = 7
GreenReaper
14

Systemd powinien użyć skryptu z /etc/init.d. Zamiast tego systemd używa pewnego rodzaju pliku szablonu. Aby to naprawić, wykonaj następujące kroki:

  1. Usuń niepoprawny skrypt usługi:

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

  2. Przeładuj skrypty demona:

    # systemctl daemon-reload

  3. Włącz usługę postgresql:

    # systemctl enable postgresql

Po tym, będzie można rozpocząć postgres wszelkich korzystnych wariantach: sudo systemctl start postgresql, sudo service postgresql start, lub sudo /etc/init.d/postgresql start. Aby sprawdzić, że PostgreSQL faktycznie uruchomić, należy sprawdzić stan usługi: sudo systemctl status postgresql. Może wyglądać następująco:

% 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
źródło
1
To musi być źle. Systemd wykonuje pracę. Zaczynało się moja klaster 9.3 w porządku; to po prostu nie uruchomi mojego klastra 9.5. To nie jest nieprawidłowy skrypt usługi, to skrypt docelowy , który wywołał usługę, aby umożliwić jej ponowne załadowanie. Brzydkie hacki nie wydaje się być dobrym sposobem, aby to zrobić albo, ale to naprawdę powinno spowodować systemctl _action_ postgresql@_version_uruchomienie
Nadwrażliwość
Nie wiem, czy to brzydki hack (prawdopodobnie tak jest), ale miałem ten sam problem z postfiksem i ta odpowiedź wydaje się rozwiązać mój problem.
decybity
Przy thesystemctl enable postgresql dostałem następujący błąd: postgresql.service nie jest usługą natywną, przekierowując do systemd-sysv-install Wykonanie / lib / systemd / systemd-sysv-install enable postgresql insserv: fopen (.depend.stop): Pozwolenie odmowa insserv: fopen (.depend.stop): odmowa zezwolenia. Najwyraźniej to nie działa z moją konfiguracją.
Kemin Zhou
1

Miałem ten sam problem po usunięciu postges9 i zainstalowaniu 10 na moim ubuntu16. Początkowo edytowałem plik /lib/systemd/system/postgresql.service o następującej treści:

[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

I mogę użyć systemctl restart / stop / start do sterowania usługą postgresql. Jednak z jakiegoś powodu powyższy plik został nadpisany (być może po aktualizacji systemu) i nie mogłem już uruchomić polecenia systemctl, aby uruchomić i zatrzymać serwer postgresql. Po przeczytaniu zdałem sobie sprawę, że nie powinieneś edytować powyższego pliku. Zamiast tego powinieneś użyć systemctl edit foo, aby zastąpić wartości domyślne. Po skorzystaniu z rozwiązania sugerowanego przez poniższy link, mój system wydaje się działać poprawnie z postgresql.

Jak zastąpić lub skonfigurować usługi systemowe?

Kemin Zhou
źródło
-2

Nie jest to najlepsze rozwiązanie, ale to rozwiązuje problem bez konieczności nurkowania. Dodaj to do crona:

@reboot sleep 5; systemctl start postgresql
użytkownik3136936
źródło