หลังจากอัพเกรด 14.04 เป็น 16.04.1 เซิร์ฟเวอร์ Postgresql ไม่เริ่มทำงาน


24

เพิ่งอัพเกรดระบบของฉันจาก 14.04 LTS ถึง 16.04.1 LTS, postgresql ไม่เริ่มทำงานบน 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 

ดูเหมือนว่าสคริปต์ systemd มีข้อมูลที่ไม่ถูกต้อง:

# 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

คำตอบ:


9

สิ่งนี้ควรใช้ไม่ได้หากคุณระบุรุ่นและชื่อคลัสเตอร์ที่ถูกต้อง

ให้บอกว่าคุณกำลังใช้เวอร์ชั่น9.5และคลัสเตอร์ถูกเรียกว่าmain:

ราคาเริ่มต้น: systemctl start postgresql@9.5-main

หยุด: systemctl stop postgresql@9.5-main

สถานะ: systemctl status postgresql@9.5-main

เปิดใช้งานเริ่มอัตโนมัติเมื่อบู๊ต: systemctl enable postgresql@9.5-main

ปิดใช้งานเริ่มอัตโนมัติเมื่อบู๊ต: 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.

สามารถพิสูจน์ได้ว่านี่เป็นผลงาน ฉันจะตั้งค่า systemd เพื่อเริ่มระบบอัตโนมัติได้อย่างไร
Artur Eshenbrener

1
systemctl enable postgresql@9.5-mainคือทั้งหมดที่คุณต้องการ
malte

1
เพิ่งอัปเกรด postgresql จาก 9.6 เป็น 10.0 และเข้าสู่ปัญหานี้อีกครั้ง พยายามแก้ปัญหาของคุณและสามารถพิสูจน์ได้: มันทำงาน
Artur Eshenbrener

สกัดจากคำตอบของ Kemin ด้านล่าง: คุณสามารถใช้เช่นsystemctl edit postgresql@9.6-mainเพื่อสร้างไฟล์แทนที่ด้วยคำสั่ง systemd เช่น: [บริการ] ดี = 15 IOSchedulingClass = 2 IOSchedulingPriority = 7
GreenReaper

14

Systemd /etc/init.dควรใช้สคริปต์จาก แต่ systemd ใช้ไฟล์เทมเพลตบางชนิดแทน หากต้องการแก้ไขให้ทำตามขั้นตอนดังกล่าว:

  1. ลบสคริปต์บริการที่ไม่ถูกต้อง:

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

  2. รีโหลดสคริปต์ daemon:

    # systemctl daemon-reload

  3. เปิดใช้งานบริการ postgresql:

    # systemctl enable postgresql

หลังจากนั้นคุณจะสามารถที่จะเริ่มต้น postgres กับสายพันธุ์ที่แนะนำใด ๆsudo systemctl start postgresql, หรือsudo service postgresql start sudo /etc/init.d/postgresql startหากต้องการตรวจสอบ PostgreSQL sudo systemctl status postgresqlที่ทำงานจริงโปรดตรวจสอบสถานะของบริการ: มันดูเหมือนว่า:

% 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
นั่นเป็นสิ่งที่ผิด Systemd ไม่ทำงาน มันเริ่มต้นคลัสเตอร์ 9.3 ของฉันแล้ว มันจะไม่เริ่มต้นคลัสเตอร์ 9.5 ของฉัน ไม่ใช่สคริปต์บริการที่ไม่ถูกต้องแต่เป็นสคริปต์เป้าหมายที่เรียกว่าบริการเพื่อให้สามารถโหลดซ้ำได้ Hacks น่าเกลียดไม่น่าจะเป็นวิธีที่ถูกต้องที่จะทำอย่างใดอย่างหนึ่ง แต่มันควรทำให้เกิดsystemctl _action_ postgresql@_version_การเรียกใช้
Auspex

ฉันไม่รู้ว่านี่เป็นแฮ็คที่น่าเกลียด (อาจเป็น) แต่ฉันมีปัญหาเดียวกันกับpostfixและคำตอบนี้ดูเหมือนจะแก้ปัญหาของฉันได้
เดซิเบต

ที่ thesystemctl เปิดใช้งาน postgresql ฉันได้รับข้อผิดพลาดดังต่อไปนี้: postgresql.service ไม่ใช่บริการแบบเนทีฟเปลี่ยนเส้นทางไปยัง systemd-sysv-install ถูกปฏิเสธ insserv: fopen (.depend.stop): การอนุญาตถูกปฏิเสธ เห็นได้ชัดว่านี่ไม่ทำงานกับการตั้งค่าของฉัน
Kemin Zhou

1

ฉันมีปัญหาเดียวกันหลังจากกวาดล้าง postges9 และติดตั้ง 10 บน ubuntu16 ของฉัน ตอนแรกฉันแก้ไขไฟล์ /lib/systemd/system/postgresql.service ด้วยเนื้อหาต่อไปนี้:

[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

และฉันสามารถใช้ systemctl restart / stop / start เพื่อควบคุมบริการ postgresql อย่างไรก็ตามด้วยเหตุผลบางอย่างไฟล์ข้างต้นถูกเขียนทับ (อาจหลังจากการอัพเดตระบบ) และฉันไม่สามารถเรียกใช้คำสั่ง systemctl เพื่อเริ่มและหยุดเซิร์ฟเวอร์ postgresql อีกต่อไป หลังจากอ่านเสร็จฉันก็รู้ว่าคุณไม่ควรจะแก้ไขไฟล์ข้างต้น แต่คุณควรใช้ systemctl edit foo เพื่อเขียนทับค่าเริ่มต้น หลังจากทำตามวิธีแก้ปัญหาที่แนะนำโดยลิงค์ต่อไปนี้ดูเหมือนว่าระบบของฉันจะทำงานอย่างถูกต้องกับ postgresql

ฉันจะแทนที่หรือกำหนดค่าบริการ systemd ได้อย่างไร


-2

ไม่ใช่วิธีที่ดีที่สุด แต่วิธีนี้แก้ปัญหาได้โดยไม่ต้องดำน้ำในสิ่งใด เพิ่มลงใน cron:

@reboot sleep 5; systemctl start postgresql
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.