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?

Artur Eshenbrener
sumber

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 [email protected]

Berhenti: systemctl stop [email protected]

Status: systemctl status [email protected]

Aktifkan mulai otomatis saat boot: systemctl enable [email protected]

Nonaktifkan mulai otomatis saat boot: 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
sumber
Dapat membuktikan bahwa ini berhasil. Bagaimana saya bisa mengatur systemd untuk memulai kembali ini?
Artur Eshenbrener
1
systemctl enable [email protected]itu 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 [email protected]untuk 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.
Artur Eshenbrener
sumber
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?

Kemin Zhou
sumber
-2

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

@reboot sleep 5; systemctl start postgresql
pengguna3136936
sumber