Setelah memutakhirkan 14.04 hingga 16.04.1 Server Postgresql tidak dimulai


24

Baru saja memutakhirkan sistem saya dari 14,04. LTS ke 16.04.1 LTS, postgresql tidak dimulai 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 

Tampaknya skrip systemd 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 harus menjadi skrip yang benar untuk postgresql?

Jawaban:


9

Ini akan berfungsi di luar kotak jika Anda memberikan versi dan nama cluster yang benar.

Katakanlah Anda sedang menjalankan versi 9.5dan cluster disebut main:

Mulai: systemctl start postgresql@9.5-main

Berhenti: systemctl stop postgresql@9.5-main

Status: systemctl status postgresql@9.5-main

Aktifkan mulai otomatis saat boot: systemctl enable postgresql@9.5-main

Nonaktifkan mulai otomatis 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.

Dapat membuktikan bahwa ini berhasil. Bagaimana saya bisa mengatur systemd untuk memulai kembali ini?
Artur Eshenbrener

1
systemctl enable postgresql@9.5-mainitu yang kamu butuhkan.
malte

1
Baru saja meningkatkan postgresql dari 9,6 ke 10.0, dan kembali ke masalah ini. Mencoba solusi Anda dan dapat membuktikan: itu berhasil.
Artur Eshenbrener

Diekstrak dari jawaban Kemin di bawah ini: Anda dapat menggunakan mis systemctl edit postgresql@9.6-mainuntuk membuat file override dengan arahan systemd seperti: [Layanan] Bagus = 15 IOSchedulingClass = 2 IOSchedulingPriority = 7
GreenReaper

14

Systemd harus menggunakan skrip dari /etc/init.d. Sebaliknya, systemd menggunakan beberapa jenis file template. Untuk memperbaikinya, ikuti langkah-langkah itu:

  1. Hapus skrip layanan yang tidak valid:

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

  2. Muat ulang skrip daemon:

    # systemctl daemon-reload

  3. Aktifkan layanan postgresql:

    # systemctl enable postgresql

Setelah itu, Anda akan dapat memulai postgres dengan varian disukai: sudo systemctl start postgresql, sudo service postgresql start, atau sudo /etc/init.d/postgresql start. Untuk memeriksa bahwa postgresql benar-benar menjalankan, silahkan cek 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.

1
Itu pasti salah. Systemd melakukan pekerjaan. Sudah mulai 9,3 cluster saya baik-baik saja; itu tidak akan memulai cluster 9.5 saya. Ini bukan skrip layanan yang tidak valid , ini skrip target , yang mereka panggil layanan untuk membuatnya reloadable. Peretasan yang jelek sepertinya juga bukan cara yang tepat untuk melakukannya, tetapi itu benar-benar akan menyebabkannya systemctl _action_ postgresql@_version_berjalan
Auspex

Saya tidak tahu apakah ini peretasan yang jelek (mungkin memang demikian), tetapi saya memiliki masalah yang sama dengan postfix dan jawaban ini tampaknya menyelesaikan masalah saya.
decibyte

Pada sistemctl aktifkan postgresql saya mendapat kesalahan berikut: postgresql.service bukan layanan asli, mengarahkan ke systemd-sysv-install Eksekusi / lib / systemd / systemd-sysv-install aktifkan postgresql insserv: fopen (.depend.stop): Izin ditolak insserv: fopen (.depend.stop): Izin ditolak. Tampaknya ini tidak berfungsi dengan pengaturan saya.
Kemin Zhou

1

Saya memiliki masalah yang sama setelah membersihkan postges9 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, untuk beberapa alasan, file di atas ditimpa (mungkin setelah pembaruan sistem) dan saya tidak bisa menjalankan perintah systemctl untuk memulai dan menghentikan server postgresql lagi. Setelah membaca, saya menyadari bahwa Anda tidak seharusnya mengedit file di atas. Sebagai gantinya Anda harus menggunakan systemctl edit foo untuk menimpa default. Setelah mengikuti solusi yang disarankan oleh tautan berikut, sistem saya tampaknya berfungsi dengan baik dengan postgresql.

Bagaimana cara mengganti atau mengkonfigurasi layanan systemd?


-2

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

@reboot sleep 5; systemctl start postgresql
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.