Sau khi nâng cấp 14.04 lên 16.04.1 Máy chủ Postgresql không khởi động


24

Chỉ cần nâng cấp hệ thống của tôi từ 14.04. LTS đến 16.04.1 LTS, postgresql không bắt đầu trên 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 

Có vẻ như tập lệnh systemd chứa dữ liệu sai:

# 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

Điều gì nên là kịch bản chính xác cho postgresql?

Câu trả lời:


9

Điều này sẽ hoạt động ra khỏi hộp nếu bạn cung cấp đúng phiên bản và tên cụm.

Hãy nói rằng bạn đang chạy phiên bản 9.5và cụm được gọi là main:

Khởi đầu: systemctl start postgresql@9.5-main

Dừng lại: systemctl stop postgresql@9.5-main

Trạng thái: systemctl status postgresql@9.5-main

Bật tự động khởi động khi khởi động: systemctl enable postgresql@9.5-main

Vô hiệu hóa tự động khởi động khi khởi động: 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.

Có thể chứng minh rằng đây là công việc. Làm thế nào tôi có thể thiết lập systemd để tự khởi động cái này?
Artur Eshenbrener

1
systemctl enable postgresql@9.5-mainlà tất cả những gì bạn cần.
malte

1
Chỉ cần nâng cấp postgresql từ 9.6 lên 10.0 và gặp lại vấn đề này. Đã thử giải pháp của bạn và có thể chứng minh: nó hoạt động.
Artur Eshenbrener

Trích xuất từ ​​câu trả lời của Kemin bên dưới: bạn có thể sử dụng ví dụ systemctl edit postgresql@9.6-mainđể tạo tệp ghi đè bằng các chỉ thị systemd, chẳng hạn như: [Dịch vụ] Nice = 15 IOSchedulingClass = 2 IOSchedulingP Warriority = 7
GreenReaper

14

Systemd nên sử dụng tập lệnh từ /etc/init.d. Thay vào đó, systemd sử dụng một số loại tệp mẫu. Để khắc phục điều đó, hãy làm theo các bước đó:

  1. Xóa tập lệnh dịch vụ không hợp lệ:

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

  2. Tải lại tập lệnh daemon:

    # systemctl daemon-reload

  3. Kích hoạt dịch vụ postgresql:

    # systemctl enable postgresql

Sau đó, bạn sẽ có thể bắt đầu postgres với bất kỳ biến thể ưa thích: sudo systemctl start postgresql, sudo service postgresql start, hoặc sudo /etc/init.d/postgresql start. Để kiểm tra xem postgresql có thực sự chạy hay không, vui lòng kiểm tra trạng thái dịch vụ : sudo systemctl status postgresql. Nó trông giống như:

% 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
Điều đó đã sai. Systemd không hoạt động. Nó đã bắt đầu cụm 9.3 của tôi tốt; nó sẽ không bắt đầu cụm 9,5 của tôi. Đó không phải là tập lệnh dịch vụ không hợp lệ , đó là tập lệnh đích , mà họ đã gọi là dịch vụ để làm cho nó có thể tải lại được. Hacks xấu xí dường như không được đúng cách để làm điều đó, hoặc, nhưng nó thực sự nên gây ra systemctl _action_ postgresql@_version_để chạy
Auspex

Tôi không biết đây có phải là một hack xấu xí hay không (nhưng có lẽ là vậy), nhưng tôi đã gặp vấn đề tương tự với postfix và câu trả lời này dường như giải quyết được đề xuất của tôi.
decibyte

Tại thesystemctl kích hoạt postgresql Tôi gặp lỗi sau: postgresql.service không phải là dịch vụ gốc, chuyển hướng đến systemd-sysv-install Executing / lib / systemd / systemd-sysv-install enable postgresql insserv: fopen (.depend bị từ chối insserv: fopen (.depend.stop): Quyền bị từ chối. Rõ ràng điều này không hoạt động với thiết lập của tôi.
Kemin Zhou

1

Tôi đã gặp vấn đề tương tự sau khi thanh trừng postges9 và cài đặt 10 trên ubfox16 của tôi. Ban đầu tôi đã chỉnh sửa tệp /lib/systemd/system/postgresql.service với nội dung sau:

[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

Và tôi có thể sử dụng systemctl restart / stop / start để kiểm soát dịch vụ postgresql. Tuy nhiên, vì một số lý do, tệp trên đã bị ghi đè (có thể sau khi cập nhật hệ thống) và tôi không thể chạy lệnh systemctl để khởi động và dừng máy chủ postgresql nữa. Sau khi đọc, tôi nhận ra rằng bạn không cần phải chỉnh sửa tập tin trên. Thay vào đó, bạn nên sử dụng foo chỉnh sửa systemctl để ghi đè mặc định. Sau khi làm theo giải pháp được đề xuất bởi liên kết sau, hệ thống của tôi dường như hoạt động tốt với postgresql.

Làm cách nào để ghi đè hoặc định cấu hình dịch vụ systemd?


-2

Không phải là giải pháp tốt nhất, nhưng điều này giải quyết vấn đề mà không cần phải đi sâu vào bất cứ điều gì. Thêm phần này vào cron:

@reboot sleep 5; systemctl start postgresql
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.