14.04'ten 16.04.1'e yükselttikten sonra Postgresql sunucusu başlamıyor


24

Sistemimi 14.04'ten yeni yükselttim. 16.04.1 LTS'den LTS'ye kadar, postgresql sistemde başlamıyor:

/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 

Systemd betiği yanlış veri içeriyor gibi görünüyor:

# 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

Postgresql için doğru komut dosyası ne olmalıdır?

Yanıtlar:


9

Doğru sürüm ve küme adını girerseniz, bu işlemin çalışması gerekir.

Sürüm çalıştırdığınızı 9.5ve kümenin çağrıldığını söyleyelim main:

Başla: systemctl start postgresql@9.5-main

Durdurmak: systemctl stop postgresql@9.5-main

Durum: systemctl status postgresql@9.5-main

Açılışta otomatik başlatmayı etkinleştir: systemctl enable postgresql@9.5-main

Açılışta otomatik başlatmayı devre dışı bırak: systemctl disable postgresql@9.5-main

foo@postgres:~$ systemctl status postgresql@9.5-main
●  postgresql@9.5-main.service - PostgreSQL Cluster 9.5-main
   Loaded: loaded (/lib/systemd/system/postgresql@.service; 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/postgresql@9.5-main.service
           ├ ─ 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.

Bunun bir iş olduğunu kanıtlayabilir. Sistemi otomatik olarak başlatmak için nasıl ayarlayabilirim?
Artur Eshenbrener

1
systemctl enable postgresql@9.5-maintüm ihtiyacın olan.
malte

1
Postgresql’i 9.6’dan 10.0’a yükselttikten sonra bu sorunu tekrar dene. Çözümünüzü denedim ve ispat edebilir: işe yarıyor.
Artur Eshenbrener

Aşağıda KEMIN cevabı alıntı: Eğer örneğin kullanabilirsiniz systemctl edit postgresql@9.6-maingibi systemd direktifleri override dosyası oluşturmak için: [Servis] Güzel = 15 IOSchedulingClass = 2 IOSchedulingPriority = 7
GreenReaper

14

Systemd, komut dosyasını kullanmalı /etc/init.d. Bunun yerine, systemd bir çeşit şablon dosyası kullanır. Bunu düzeltmek için şu adımları izleyin:

  1. Geçersiz servis komut dosyasını kaldırın:

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

  2. Daemon scriptlerini yeniden yükle:

    # systemctl daemon-reload

  3. Postgresql hizmetini etkinleştir:

    # systemctl enable postgresql

Bundan sonra, herhangi bir tercih varyantları ile postgres başlamak mümkün olacaktır: sudo systemctl start postgresql, sudo service postgresql startveya sudo /etc/init.d/postgresql start. Aslında çalıştırmanızı postgresql kontrol etmek için, hizmetin durumunu kontrol edin: sudo systemctl status postgresql. Öyle görünüyor:

% 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.

1
Bu yanlış olmalı. Systemd yapar işi. 9.3 kümeme gayet iyi başladı; 9.5 kümeme başlamıyor. Bu geçersiz bir servis betiği değil, hedef betiği, yeniden erişilebilir hale getirmek için bir servis çağırdılar . Çirkin kesmek ya bunu yapmak doğru yol olarak görünmüyor, ama gerçekten neden gerektiğini systemctl _action_ postgresql@_version_çalıştırmak için
Auspex

Bu çirkin bir hack olup olmadığını bilmiyorum (muhtemelen), ancak postfix ile aynı problem vardı ve bu cevap benim pervanem çözüyor gibi görünüyor.
desibel

Thesystemctl enable postgresql şu hatayı aldım: postgresql.service yerel bir hizmet değil, systemd-sysv-install komutuna yönlendiriliyor Yürütme / lib / systemd / systemd-sysv-install etkinleştirme reddedildi insserv: fopen (.depend.stop): İzin verilmedi. Görünüşe göre bu benim kurulum ile çalışmıyor.
Kemin Zhou,

1

Aynı postaları9 temizledikten sonra da aynı sorunu yaşadım ve ubuntu16’ya 10 yükledim. Başlangıçta /lib/systemd/system/postgresql.service dosyasını aşağıdaki içerikle düzenledim:

[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

Postgresql servisini kontrol etmek için systemctl restart / stop / start komutunu kullanabilirim. Ancak bazı nedenlerden dolayı yukarıdaki dosyanın üzerine yazılmıştır (belki sistem güncellemesinden sonra) ve postgresql sunucusunu daha fazla başlatmak ve durdurmak için systemctl komutunu çalıştıramadım. Biraz okuduktan sonra, yukarıdaki dosyayı düzenlemeniz gerekmediğini anladım. Bunun yerine, varsayılanların üzerine yazmak için systemctl edit foo'yu kullanmalısınız. Aşağıdaki link tarafından önerilen çözümü takip ettikten sonra, sistemim postgresql ile düzgün çalışıyor gibi görünüyor.

Sistem hizmetlerini nasıl geçersiz kılabilir veya yapılandırabilirim?


-2

En güzel çözüm değil, ancak bu, hiçbir şeye dalmaya gerek kalmadan sorunu çözer. Bunu cron'a ekle:

@reboot sleep 5; systemctl start postgresql
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.