ตรวจสอบให้แน่ใจว่ากระบวนการทำงานอยู่เสมอ


23

ฉันเริ่มโฮสต์ไซต์สักครู่โดยใช้ Cherokee สำหรับแหล่งข้อมูลภายนอก (FastCGI ฯลฯ ) มีตัวเลือกในการเปิดใช้งานกระบวนการหากไม่พบหนึ่งที่ทำงานบนซ็อกเก็ตหรือพอร์ตที่กำหนด สิ่งนี้ดีมากเพราะมันหมายความว่าถ้า PHP หรือเว็บไซต์ Django ตกหลุม (บางครั้งก็ทำ) มันจะทำการรีสตาร์ทโดยอัตโนมัติ

บนเซิร์ฟเวอร์ใหม่ที่ใช้ PHP-FPM ฉันไม่สามารถใช้ Cherokee (มีข้อผิดพลาดกับ PHP) ดังนั้นฉันจึงย้ายไปที่ NGINX ฉันชอบ NGINX (สำหรับรูปแบบการกำหนดค่า) แต่ฉันมีปัญหาร้ายแรงเกี่ยวกับกระบวนการที่ล้มเหลวและไม่ตอบสนอง PHP ทำเช่นนี้บางครั้ง แต่เว็บไซต์ Django มีปัญหามากกว่า ฉันได้สร้างสคริปต์เริ่มต้นสำหรับพวกเขาแล้วและพวกเขาก็เปิดเครื่อง แต่นี่ก็ไม่ได้ช่วยฉันเลยถ้าพวกเขาออกระหว่างการรีบูต

ฉันเดาว่าฉันกำลังมองหาพร็อกซี FastCGI สิ่งที่เชโรกีรู้ว่ากระบวนการใดควรทำงานบนซ็อกเก็ต / พอร์ตและตอบสนองตามความต้องการ สิ่งนั้นมีอยู่จริงหรือไม่? มีวิธีใดที่จะสร้างสิ่งนี้ลงใน NGINX (เพื่อความสะดวกในการกำหนดค่า)

คำตอบ:


13

วิธีการเกี่ยวกับdaemontoolsและเครื่องมือควบคุมโดยเฉพาะ

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


+1 สำหรับ daemontools อย่างไรก็ตามคุณมักจะไม่เพียงแค่โยนสคริปต์เช่น/etc/init.d/apachectlนั้น execคุณมักจะต้องเขียนสคริปต์เริ่มต้นง่ายๆด้วยตัวคุณเองกับการใช้งาน แม้ว่าฉันจะชอบดูตัวอย่างเพิ่มเติมโดยใช้ daemontools
Stefan Lasiewski

daemontools มีชาติอื่นเหมือน runit ไม่สำคัญเท่าไรตอนนี้ daemontools เป็นสาธารณสมบัติ แต่ distro ที่เก่ากว่าอาจมี runit เท่านั้น
camh


5

ฉันทำตามdaemontoolsคำแนะนำที่สองแต่ถ้าคุณไม่ชอบวิธีการทำงานของซอฟต์แวร์ DJB (ไม่ว่าด้วยเหตุผลใดก็ตาม) ก็มีเช่นsupervisordกัน

ฉันตั้งค่ารูป FreeBSD ในขณะที่เคยsupervisordจัดการnginxและgunicornซึ่งฉันเคยโฮสต์แอพ WSGI แบบง่าย ๆ และกระบวนการทั้งหมดค่อนข้างตรงไปตรงมา

หากคุณทำสิ่งนี้เพื่อ Django, Gunicorn ทำให้ตรงไปตรงมาจริงๆในการปรับใช้แอพ Django, btw ดูโพสต์บล็อกนี้สำหรับรายละเอียดเพิ่มเติม


4

อีกทางเลือกหนึ่งคือใช้monitซึ่งเป็นตัวเลือกที่ฉันใช้โดยทั่วไป


3

คุณเคยคิดgodไหม

พระเจ้าทรงกำหนดค่าได้ง่ายและง่ายต่อการขยายกรอบการตรวจสอบที่เขียนใน Ruby

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

ฉันใช้มันเพื่อให้แน่ใจว่าหากอินสแตนซ์ของ Rails / nginx ล้มเหลวพวกเขาจะได้รับการฟื้นฟูและแม้ว่าฉันจะไม่เห็นการสนับสนุนในตัวเพื่อตรวจสอบว่ามันใช้พอร์ตที่ถูกต้องหรือไม่ แต่ถ้าปัญหาคือกระบวนการล้มเหลวหรือ godจะไม่ทำงานคุณไม่สามารถไปอย่างผิดปกติกับ


0

นอกจากนี้ในการ daemontools และ supervisord มีdaemonize


มันต้องใช้เวลาหกปีสำหรับคนที่จะถามคำถามที่ชัดเจนของวิธีการนี้ตอบสนองความต้องการของคำถามและไม่ตรวจสอบสำหรับภูตยกเลิกและ respawning
JdeBP

0

โซลูชันแฮ็คจะเปิดตัวสคริปต์ (ผ่านcron) เป็นระยะที่ตรวจพบว่ากระบวนการหยุดทำงานและในกรณีนี้จะเปิดใช้งานอีกครั้ง


0

มีหลายวิธีในการรีสตาร์ท daemon ที่ล้มเหลวข้อเสนอแนะตามปกติคือ "respawn in inabab" แต่ด้วยข้อควรพิจารณาบางอย่างของข้อ จำกัด หากสกรูของเครื่องจริงๆ

watchdog daemon ยังสามารถมอนิเตอร์กระบวนการผ่านไฟล์ PID ของมัน อย่างไรก็ตามควรถือว่าเป็นแนวป้องกันรองเท่านั้นที่จะรีบูตเครื่องที่ป่วยเกินกว่าจะทำงานได้อย่างถูกต้อง (เช่นหน่วยความจำไม่เพียงพอ, fork-bombed, ฯลฯ ) และไม่ใช่วิธีหลักหรือตรวจสอบและรีสตาร์ท daemon

ในที่สุดคุณสามารถพิจารณาการตรวจสอบระบบที่ซับซ้อนโดยใช้ nagios เพื่อให้ผู้ดูแลระบบมีมุมมองร่วม สามารถเรียกใช้ปลั๊กอินเพื่อตรวจสอบการทำงานของ daemon ภายนอกซึ่งเป็นการทดสอบที่สมบูรณ์มากขึ้นของการทำงานที่ PID นั้นใช้งานอยู่


-1

คำตอบง่ายๆ - เริ่มเขียน pid ของคุณที่ไหนสักแห่งและตรวจสอบ x ทุกครั้ง (วินาที, นาที, การเดิมพันของคุณ) ว่ากระบวนการดังกล่าวเกิดขึ้นหรือไม่

คำตอบยาว - ทั้งหมดข้างต้นเป็นวิธีการที่ดี แต่ค่อนข้างซับซ้อน

โปรดทราบว่าการมีชีวิตอยู่และการตอบคำขอเป็นสิ่งที่แตกต่างกัน


1
... และไขว้มือของคุณและหวังว่าจะไม่มีสิ่งใดมาขีดทับไฟล์ PID หรือลบทิ้งหรือนำกลับมาใช้ใหม่เพื่อภูตต่าง ๆ หรือให้คะแนนในกระบวนการที่ไร้เดียงสาและไม่เกี่ยวข้องอื่น ๆ ที่ไม่ตอบสนองต่อเช็ค สำหรับการขึ้น ☺ซึ่งเป็นสาเหตุที่คำตอบยาว ๆ ของผู้ดูแล daemon ที่เหมาะสมที่เรียกใช้ daemons เป็นกระบวนการลูกและตรวจสอบพวกเขาด้วยกลไกระบบ Unix / Linux ปกติเป็นวิธีที่ดีกว่าที่ยอมรับกันมานาน
JdeBP
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.