ฉันมีแอปพลิเคชันจาวาที่มี 4 กระบวนการทำงาน (บน Ubuntu 20.04LTS) อ้างอิงรูปภาพด้านล่าง บริการ 1 เริ่มก่อน 2+ บริการ 2 จะเริ่มบริการ 3 และ 4 ด้วย
ฉันได้ตั้งค่า 1 และ 2 อย่างง่ายและใช้งานได้
การพึ่งพาบริการ บริการ 2 เริ่มต้นบริการ 3 และ 4
อย่างไรก็ตาม บริการ 3 และ 4 สามารถหยุด/เริ่มต้นใหม่โดยไม่ขึ้นกับบริการ 2 มีวิธีที่จะนำสิ่งนี้ไปใช้ในข้อกำหนดบริการ app-service4.service หรือไม่
ฉันได้ดูที่ โพสต์บล็อกที่อธิบายกรณีที่คล้ายกันดังนั้นฉันคิดว่าการกำหนดบริการ 3 และ 4 ด้วยบริการ "PartOf" 2 อาจเป็นวิธีหนึ่ง แต่จะทำให้บริการ 3 และ 4 เข้าใจว่าบริการ 2 เริ่มต้นแล้วได้อย่างไร
ด้านล่างนี้คือ service2.service
[หน่วย]
คำอธิบาย=บริการ 2
After=service1.service
[บริการ]
ExecStart=/usr/local/bin/service2.sh เริ่มต้น
ExecStop=/usr/local/bin/service2.sh หยุด
[ติดตั้ง]
ต้องการโดย=default.target
หลังจากเริ่มต้นสถานะของบริการจะแสดง CGroup เช่นด้านล่าง (pid และชื่ออื่น ๆ แบบง่าย)
/system.slice/service2.service
|- 123 /bin/sh /usr/local/bin/service2.sh เริ่มต้น
|- 124 บริการจาวา2
|- 125 จาวาเซอร์วิส3
|- 126 บริการจาวา4
แล้วฉันจะเพิ่ม service3.service ซึ่งจะอนุญาตให้ฉันหยุดทำงาน/รีสตาร์ท service3 โดยไม่ยกเลิก service2 ได้อย่างไร ด้านล่างนี้คือความพยายามของฉันซึ่งไม่สามารถเข้าใจได้ว่า service2 กำลังทำงานอยู่
[หน่วย]
Description=บริการ3
PartOf=service2.service
[บริการ]
ExecStart=/usr/local/bin/service3.sh เริ่มต้น
ExecStop=/usr/local/bin/service3.sh หยุด
[ติดตั้ง]
ต้องการโดย=default.target
ด้วยการตั้งค่านี้หลังจากเริ่ม service2 "สถานะ systemctl service2" แสดงกระบวนการ service2-servic4 ตามที่กล่าวไว้ข้างต้น และ "สถานะ systemctl service 3" แสดงเป็น "ไม่ได้ใช้งาน (ตาย)" ความพยายามในการเริ่มบริการ 3 (systemctl start service3) สิ้นสุดลงด้วยการหยุดแบบเดียวกัน (ขณะที่มันทำงานอยู่แล้ว คำสั่ง start จะสิ้นสุดลงซึ่งคำสั่ง stop จะถูกดำเนินการ) หากฉันพยายามเริ่มต้นใหม่อีกครั้ง มันจะเริ่มต้นเป็นบริการแยกต่างหาก .
ฉันต้องการให้ daemon เข้าใจว่ากระบวนการภายใต้ service-2 เป็น service-3 จริง ๆ ดังนั้น service-3 จึงจะปรากฏเป็นกำลังทำงานอยู่ เป็นไปได้ไหม
หากไม่มี - มีวิธีแก้ไขใดบ้างเพื่อให้สามารถจัดการบริการแยกกันได้