ฉันเขียนโปรแกรมที่ใช้ฐานข้อมูล Postgres และฉันเขียนไฟล์ serviced สำหรับบริการ ขณะนี้บริการของฉันเริ่มทำงานเมื่อบูตได้ดีและหยุดลงเมื่อ Postgres หยุดการอัปเกรด (โดยapt upgrade
) อย่างไรก็ตามเมื่อการอัพเกรดเสร็จสมบูรณ์และ Postgres เริ่มต้นอีกครั้งบริการของฉันจะไม่เริ่มต้นโดยอัตโนมัติ
ฉันสามารถกำหนดการพึ่งพาบางส่วนเพื่อให้บริการของฉันเริ่มทำงานอีกครั้งโดยอัตโนมัติได้หรือไม่
นี่คือสถานะของการบริการของฉันหลังจากที่มันถูกหยุดโดยอัตโนมัติในระหว่างการอัพเกรด Postgres:
● tabill.service - My service
Loaded: loaded (/srv/tabill/tabill.service; enabled; vendor preset: enabled)
Active: inactive (dead) since Tue 2017-07-04 00:29:24 EEST; 44min ago
Main PID: 1048 (code=killed, signal=TERM)
โปรดทราบว่าฉันสามารถเริ่มบริการด้วยตนเองอีกครั้งได้ดี
นี่คือไฟล์บริการของฉัน:
[Unit]
Description=My service
Wants=nginx.service
Requires=postgresql.service
After=postgresql.service
[Service]
Type=simple
ExecStart=/srv/tabill/app/serve
Restart=always
TimeoutSec=60
[Install]
WantedBy=multi-user.target
ฉันได้ลองเพิ่มPartOf=postgresql.service
และBindsTo=postgresql.service
จากนั้นหยุดและเริ่มต้น Postgres ด้วยตนเอง แต่ก็ไม่ได้ช่วยอะไร
แน่นอนฉันสามารถลบออกได้Requires
แต่การหยุดบริการทั้งสองเข้าด้วยกันเป็นสิ่งที่ดีกว่าถ้าเพียง แต่พวกเขาทั้งสองจะเริ่มสำรองข้อมูล
Requires=
การนำออกที่ไม่ได้ช่วย ฉันคิดว่าปัญหาคือPartOf=
ลิงก์ "หยุดและรีสตาร์ทหน่วย" แต่ Postgres ไม่รีสตาร์ทระหว่างการอัพเกรด มันหยุดอัพเกรดและเริ่ม
systemctl restart postgresql
นั้นแล้วระบบจะจดจำการเริ่มบริการที่ต้องพึ่งพาใหม่อีกครั้ง ดูเหมือนว่าฉลาดด้วยเหตุผลบางอย่างไม่รวมกันของstop
และแทนstart
restart
PartOf=
ฟังดูเหมือนทางออกที่ถูกต้อง คุณลองRequires=
ลบออกไหม