ฉันจะเริ่มต้นกระบวนการใหม่โดยอัตโนมัติหลังจากที่ยุติได้อย่างไร


11

ฉันมีโปรแกรม golang ที่ฉันต้องการรีสตาร์ทหลังจากมันสิ้นสุดลงในกล่อง Debian Squeeze สิ่งที่ให้บริการ HTTP อยู่หลังการติดตั้ง Apache 2 mod_proxy ฉันไม่คาดหวังว่ากระบวนการจะล้มเหลว แต่ฉันต้องการทำประกันกับมัน

บน Ubuntu ฉันจะใช้งานธรรมดาเพื่อรักษากระบวนการให้อยู่รอด เดเบียนไม่ชอบการพุ่งพรวดจากสิ่งที่ฉันเข้าใจเพราะมันเป็นการแทนที่แบบ init

มีทางเลือกใดบ้างที่จะรีสตาร์ทหนึ่งกระบวนการขึ้นไปหลังจากที่ยุติการทำงานใน Squeeze และเล่นกับ init ดี?


คุณช่วยกรุณาเรียบเรียงคำถามของคุณใหม่หรือไม่? คุณต้องการเริ่มต้นกระบวนการใหม่หลังจากที่ถูกยกเลิกหรือไม่
mailq

ฉันต้องการเริ่มต้นกระบวนการใหม่โดยอัตโนมัติหากเกิดข้อผิดพลาดหรือยกเลิกเอง
ลบ

2
โปรแกรมinitแบบดั้งเดิมทำสิ่งนี้ได้อย่างแม่นยำ ทำไมผู้คนถึงคิดว่าเป็นความคิดที่ดีที่จะใช้ init เพื่อรันเชลล์สคริปต์ที่เรียกใช้เชลล์สคริปที่เริ่มต้นกระบวนการอื่นที่ทำสิ่งเดียวกัน แต่ถ้าไม่มีเคอร์เนลที่ตื่นตระหนกอัตโนมัติ
Simon Richter

นั่นเป็นประเด็นที่ยุติธรรม ฉันจะตรวจสอบเพียงใช้ init เช่นกัน ฉันกำลังบรรจุซอฟต์แวร์โดยใช้ dpkg ดังนั้นการสร้างสคริปต์เริ่มต้นไม่ควรเป็นปัญหา
ลบ

คำตอบ:


10

daemontoolsวิธีที่ดีที่สุดที่จะไปให้มันเป็น พวกเขาช่วยให้คุณตรวจสอบและกระบวนการเกิดใหม่

ดูเอกสารประกอบในเว็บไซต์ของพวกเขา: http://cr.yp.to/daemontools.html


1
ขอบคุณ - นั่นเป็นสิ่งที่ฉันตามมา DJB = ดีตามกฎ จริง ๆ แล้วฉันควรจะจำได้ว่ามีอยู่จริงด้วยการใช้เวลา 5 ปีในการดูแล qmail!
ลบ

เหมือนกันกับฉันยกเว้นว่าฉันเคยดูแล djbdns หลายครั้ง
mr.b

10

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

สุดท้ายถ้าคุณต้องการบางสิ่งบางอย่างไม่น่าเชื่อง่ายต่อการติดตั้งผมเคยประสบความสำเร็จที่ดีกับmonit มันบรรจุในเดเบียนด้วย


2
daemontools ยอดเยี่ยม monit เป็นฝันร้ายที่เลวร้ายของ "ทำไมคุณถึงไม่เริ่มนรก!" แห้ว.
womble

2

ดูแลหรือตรวจสอบได้ดีสำหรับการรักษากระบวนการเดียวมีชีวิตอยู่ ตั้งแต่คุณถามในการรักษา "หนึ่งหรือมากกว่า" กระบวนการมีชีวิตอยู่ผมอยากจะเสียบsupervisord แน่นอนว่ามันเกินความจริงสำหรับการจัดการกระบวนการเดียว แต่ถ้าคุณต้องการติดตามกระบวนการหลายอย่างอาจเป็นเรื่องของคุณ


2

ตัวเลือกหนึ่งคือการใช้แทนการวางสคริปต์ของคุณใน/etc/inittab/etc/init.d/

คุณเพียงเพิ่มรายการในรูปแบบต่อไปนี้:

<jobname>:<runlevels>:respawn:<command>

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


2

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

สคริปต์ดูเหมือนอะไร

#!/bin/bash 
# make-run.sh 
# make sure a process is always running.  
# Add the following to the crontab (i.e. crontab -e)
# */5 * * * * /home/path_to_make_run/make-run.sh

process=servermonitoringhq 
makerun="/home/path_to_the_job_you_want_running/runjob.sh"  

if pgrep $process > /dev/null         
then                 
  exit         
else         
  $makerun &         
fi 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.