จะรีสตาร์ทเฉพาะกระบวนการบางอย่างโดยใช้ Supervisorctl ได้อย่างไร?


107

ฉันใช้กระบวนการบางอย่างโดยใช้ผู้บังคับบัญชาชื่อ process1, process2, ... , process8 หากต้องการเริ่มกระบวนการใหม่ {1-4} ฉันจะดำเนินการกับ Supervisorctl ได้อย่างไร

คำตอบ:


177

สนับสนุน supervisord ประมวลผลกลุ่ม คุณสามารถจัดกลุ่มกระบวนการเป็นกลุ่มที่มีชื่อและจัดการร่วมกันได้

[unix_http_server]
file=%(here)s/supervisor.sock

[supervisord]
logfile=supervisord.log
pidfile=supervisord.pid

[program:cat1]
command=cat

[program:cat2]
command=cat

[program:cat3]
command=cat

[group:foo]
programs=cat1,cat3

[supervisorctl]
serverurl=unix://%(here)s/supervisor.sock

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

คำสั่ง Supervisorctl สามารถเรียกด้วยชื่อกลุ่ม:

supervisorctl restart foo:

เช่นเดียวกับชื่อกระบวนการหลายชื่อ:

supervisorctl restart foo:cat1 cat2

47
มันน่าทึ่งมากที่ได้พบว่าโคลอนจำเป็นต้องต่อท้ายเมื่อออกคำสั่งไปยังกลุ่มกระบวนการ ขอบคุณ.
mafrosis

4
เห็นด้วย ฉันคิดว่าsupervisorctl restart foo:*ทำให้สิ่งที่เกิดขึ้นชัดเจนขึ้น
ทอม

ดังนั้นเพื่อตอบคำถามของ OP โดยตรงคุณจึงไม่สามารถเริ่มกระบวนการเฉพาะได้โดยตรง คุณรีสตาร์ทได้เฉพาะกลุ่มที่ต้องใช้แท็กกลุ่ม
Cerin

@Cerin จากการทดสอบของฉันเองฉันก็ได้ข้อสรุปเดียวกัน เมื่อพูดถึงเรื่องเล็ก ๆ น้อย ๆ ฉันมักจะเห็นกลุ่มที่ท้ายไฟล์. config ที่มีกระบวนการทั้งหมด จากการสังเกตซ้ำแล้วซ้ำเล่าสิ่งนี้ไม่สมเหตุสมผล ตอนนี้มันสมเหตุสมผลแล้ว :)
AlanSE

คุณทำให้วันของฉัน :)
sumit

3

เนื่องจากsupervisorctlยอมรับหลายกระบวนการในบรรทัดคำสั่งคุณสามารถใช้ประโยชน์จากการขยายเชลล์รั้ง (เช่นใน Bash) เพื่อควบคุมกระบวนการต่างๆ:

supervisorctl restart process{1..4}

ถูกขยายโดยเปลือกเป็น

supervisorctl restart process1 process2 process3 process4

ราวกับว่าคุณพิมพ์ออกมาอย่างโจ่งแจ้ง

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