รักษา 100 อินสแตนซ์ของโปรแกรมที่ทำงานอยู่


12

ขณะนี้ฉันกำลังใช้ supervisord เพื่อรักษาสคริปต์ให้ทำงาน 100 อินสแตนซ์ ถ้ามีผู้ตายแล้วมันจะเริ่มขึ้นใหม่

อย่างไรก็ตามดูเหมือนว่าจะดิ้นรนรักษาจำนวนมากขึ้น (> 300 กระบวนการ) และฉันกำลังมองหาการทดแทน Monit ดูเหมือนจะไม่ทำสิ่งที่ฉันต้องการเพราะมันจะตรวจสอบสคริปต์แต่ละตัวและดูเหมือนจะไม่สามารถดูสคริปต์เดียวกันได้ 100 อินสแตนซ์ได้อย่างง่ายดาย

มีข้อเสนอแนะเกี่ยวกับเครื่องมืออื่นที่ฉันสามารถใช้ได้ไหม?


สคริปต์เหล่านี้กำลังทำอะไรและทำไมคุณต้องการหลายอินสแตนซ์ พวกเขาจะถูกเรียกใช้ด้วยข้อโต้แย้ง / สภาพแวดล้อมที่แตกต่างกันหรืออะไร
psusi

1
สคริปต์ทุบตีเรียบง่ายจะใช้งานได้หรือไม่ สิ่งที่ชอบ ... นับจำนวนของกระบวนการสคริปต์ที่ทำงานหากน้อยกว่า 100 ให้เริ่มหมายเลขที่หายไปหรือไม่
เกบ

3
คุณพยายามทำอะไรให้สำเร็จ เหตุใดกระบวนการ 300 กระบวนการถึงใกล้จะตาย? อาจเป็นวิธีที่ดีกว่าในการทำงานของคุณให้สำเร็จไม่น้อยไปกว่านั้นหากอินสแตนซ์ของการเรียกใช้สคริปต์ 299 ครั้งดีกว่า 300 รายการมีข้อบกพร่องบางอย่างกับสถาปัตยกรรมแอปพลิเคชันของคุณ กระบวนการเริ่มต้นใหม่ที่เสียชีวิตโดยไม่เข้าใจว่าทำไมพวกเขาถึงตายมักจะส่งผลให้เกิดการเสียชีวิตอีกครั้งและเกิดค่าใช้จ่ายจำนวนมาก
msw

ฉันทำงานกับระบบเดิมที่นี่กำลังทำการประมวลผล URL และแต่ละคนต้องการเธรดของตัวเอง (เขียนด้วย PHP) ใช่สถาปัตยกรรมเป็นข้อบกพร่อง แต่ยังคงต้องทำงานกับมัน ... ทำงานใหม่ในขณะนี้ :)
Jong

คำตอบ:


1

คุณสามารถใช้ได้:

ps h --ppid $$ | wc -l

เพื่อรับจำนวนกระบวนการลูกจากสคริปต์ทุบตี (จำไว้ว่ารวมถึง ps) ดังนั้นหากคุณต้องการมี 1,000 กระบวนการคุณตรวจสอบเพื่อดูว่าผลตอบแทน 1001 ถ้าไม่ยิงพวกเขาด้วย:

cmd &

เพื่อให้พวกเขาทำงานในฐานะลูกของสคริปต์ปัจจุบัน (และรวมอยู่ในการนับ) คุณสามารถนอนหลับได้สักครู่จากนั้นตรวจสอบอีกครั้งในลูปตลอดไป สิ่งหนึ่งที่ต้องจำไว้คือถ้าคุณกำลังวางไข่กระบวนการอื่นคุณจะต้องแก้ไขpsคำสั่งเพื่อกรองกระบวนการที่คุณต้องการ

คำสั่งแรกนั้นคือส่วนหลักของจิ๊กซอว์มันควรจะเพิ่มอีกหน่อยจนกว่าคุณจะมีสคริปต์ของคุณ


0

ฉันจะใช้pgrep|wc -lหรืออะไรแบบนั้นในเชลล์สคริปต์ รอหนึ่งวินาที (หรือน้อยกว่าบน Linux หากคุณต้องการ) ระหว่างการตรวจสอบแต่ละsleepครั้ง


0

หากสคริปต์ของคุณตายและจะกลับไปที่เชลล์คุณสามารถใช้สคริปต์ตัวตัดคำสำหรับแต่ละอินสแตนซ์:

while [ 1 == 1 ] ; do /path/to/script ; done

หรือคุณเขียน wrapper ที่ใช้สคริปต์และใช้wait/waitpidเพื่อตรวจจับกระบวนการที่ตาย


1
อย่างน้อยฉันก็ต้องนอนหลับที่นั่นในตอนท้ายในกรณีที่สคริปต์มีเงื่อนไขเทอร์มินัล - ล้มเหลวเสมอ (ชิ้นเต็ม, ไม่สามารถอ่านไฟล์ปรับแต่ง ฯลฯ ) .. มิฉะนั้นคุณอาจมี 100 กระบวนการที่จะทำ สำหรับซีพียูหนึ่งชิ้น นอกจากนี้ - 100 * (กระบวนการทุบตี + รอยเท้าเริ่มต้นเริ่มต้นของแอปที่ล้มเหลว) == อาจเป็น RAM ที่ไม่สำคัญ)
synthesizerpatel
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.