Pertanyaan Setelah upgrade 14.04 ke 16.04.1 Server Postgresql tidak dimulai


Baru saja mengupgrade sistem saya dari 14.04. LTS ke 16.04.1 LTS, postgresql tidak mulai pada 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 

Sepertinya skrip sistem berisi data yang salah:

# 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

Apa yang seharusnya menjadi skrip yang benar untuk postgresql?


21
2017-08-09 11:13


asal




Jawaban:


Ini harus bekerja di luar kotak jika Anda memberikan versi yang benar dan nama kluster.

Katakanlah Anda menjalankan versi 9.5 dan gugus itu disebut main:

Mulai: systemctl start postgresql@9.5-main

Berhenti: systemctl stop postgresql@9.5-main

Status: systemctl status postgresql@9.5-main

Aktifkan autostart saat boot: systemctl enable postgresql@9.5-main

Nonaktifkan autostart saat boot: 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.

7
2018-03-31 15:56



Dapat membuktikan bahwa ini berhasil. Bagaimana saya bisa men-setup systemd untuk autostart ini? - Artur Eshenbrener
systemctl enable postgresql@9.5-main adalah semua yang kamu butuhkan. - malte
Tingkatkan postgresql dari 9,6 menjadi 10,0, dan tekan kembali masalah ini. Mencoba solusi Anda dan dapat membuktikan: itu berhasil. - Artur Eshenbrener


Systemd harus menggunakan skrip dari /etc/init.d. Sebagai gantinya, systemd menggunakan sejenis file template. Untuk memperbaikinya, ikuti langkah-langkah itu:

  1. Hapus skrip layanan tidak valid:

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

  2. Muat kembali skrip daemon:

    # systemctl daemon-reload 

  3. Aktifkan layanan postgresql:

    # systemctl enable postgresql

Setelah itu, Anda akan dapat memulai postgres dengan varian yang disukai: sudo systemctl start postgresql, sudo service postgresql start, atau sudo /etc/init.d/postgresql start. Untuk memeriksa apakah postgresql benar-benar berjalan, silakan periksa status layanan: sudo systemctl status postgresql. Itu bisa terlihat seperti:

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

15
2017-08-09 11:13



Itu pasti salah. Systemd tidak kerja. Sudah mulai 9.3 cluster saya baik-baik saja; itu tidak akan memulai 9,5 klaster saya. Itu bukan sebuah tidak valid naskah layanan, itu a target skrip, yang mereka sebut a layanan untuk membuatnya bisa dimuat kembali. Peretasan yang menjijikan juga bukan cara yang benar untuk melakukannya, tetapi itu harus benar-benar terjadi systemctl _action_ postgresql@_version_ untuk berlari - Auspex
Saya tidak tahu apakah ini peretasan yang buruk (mungkin saja), tetapi saya memiliki masalah yang sama postfix dan jawaban ini tampaknya memecahkan proplem saya. - decibyte
Pada thesystemctl memungkinkan postgresql saya mendapat error berikut: postgresql.service bukan layanan asli, mengarahkan ke systemd-sysv-install Executing / lib / systemd / systemd-sysv-install memungkinkan postgresql insserv: fopen (.depend.stop): Izin ditolak insserv: fopen (.depend.stop): Izin ditolak. Ternyata ini tidak berfungsi dengan setup saya. - Kemin Zhou


Saya memiliki masalah yang sama setelah membersihkan postes9 dan menginstal 10 di ubuntu16 saya. Awalnya saya mengedit file /lib/systemd/system/postgresql.service dengan konten berikut:

[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

Dan saya dapat menggunakan systemctl restart / stop / start untuk mengontrol layanan postgresql. Namun, karena alasan tertentu, file di atas ditimpa (mungkin setelah pembaruan sistem) dan saya tidak dapat menjalankan perintah sistemctl untuk memulai dan menghentikan server postgresql lagi. Setelah beberapa kali membaca, saya menyadari bahwa Anda tidak seharusnya mengedit file di atas. Sebagai gantinya Anda harus menggunakan foo edit sistemctl untuk menimpa default. Setelah mengikuti solusi yang disarankan oleh tautan berikut, sistem saya tampaknya berfungsi dengan baik dengan postgresql.

Bagaimana cara saya mengganti atau mengkonfigurasi layanan sistem?


0
2018-01-04 22:36





Bukan solusi terbaik, tetapi ini memecahkan masalah tanpa harus menyelami apa pun. Tambahkan ini ke cron:

@reboot sleep 5; systemctl start postgresql

-1
2017-08-24 07:44