ฉันต้องการ daemonizer ที่สามารถเปิดโดยพลสคริปต์ทั่วไปหรือสั่งเข้ามาเป็นภูต
มีสองกรณีทั่วไปที่ฉันต้องการจัดการ:
ฉันมีสคริปต์ที่ควรรันตลอดไป หากเคยตาย (หรือรีบูต) ให้รีสตาร์ท อย่าปล่อยให้สำเนาสองชุดทำงานพร้อมกัน (ตรวจสอบว่าสำเนาทำงานอยู่แล้วและไม่เปิดใช้ในกรณีนั้น)
ฉันมีสคริปต์หรือคำสั่งบรรทัดคำสั่งง่ายๆที่ฉันต้องการดำเนินการซ้ำ ๆ ตลอดไป (โดยหยุดชั่วคราวระหว่างการรัน) อีกครั้งอย่าปล่อยให้สคริปต์สองสำเนาทำงานพร้อมกัน
แน่นอนว่ามันเป็นเรื่องเล็กน้อยที่จะเขียน "while (true)" วนรอบสคริปต์ในกรณีที่ 2 จากนั้นใช้โซลูชันสำหรับกรณีที่ 1 แต่วิธีแก้ปัญหาทั่วไปจะแก้ปัญหากรณีที่ 2 โดยตรงเนื่องจากใช้กับสคริปต์ในกรณีที่ 1 เป็น ดี (คุณอาจต้องการหยุดชั่วคราวให้สั้นลงหรือไม่มีเลยหากสคริปต์ไม่ได้ตั้งใจที่จะตาย (แน่นอนว่าถ้าสคริปต์ไม่มีวันตายจริงๆการหยุดชั่วคราวก็ไม่สำคัญ))
โปรดทราบว่าโซลูชันไม่ควรเกี่ยวข้องกับการเพิ่มรหัสล็อกไฟล์หรือการบันทึก PID ลงในสคริปต์ที่มีอยู่
โดยเฉพาะอย่างยิ่งฉันต้องการโปรแกรม "daemonize" ที่สามารถเรียกใช้งานได้
% daemonize myscript arg1 arg2
หรือตัวอย่างเช่น
% daemonize 'echo `date` >> /tmp/times.txt'
ซึ่งจะทำให้รายการวันที่เพิ่มขึ้นต่อท้าย times.txt (โปรดสังเกตว่าถ้าอาร์กิวเมนต์ที่จะ daemonize เป็นสคริปต์ที่ทำงานตลอดไปเหมือนในกรณีที่ 1 ข้างต้น daemonize จะยังคงทำสิ่งที่ถูกต้องเริ่มต้นใหม่เมื่อจำเป็น) จากนั้นฉันสามารถใส่คำสั่งดังกล่าวข้างต้นใน. login ของฉันได้ และ / หรือ cron ทุกชั่วโมงหรือนาที (ขึ้นอยู่กับว่าฉันกังวลแค่ไหนที่มันจะตายโดยไม่คาดคิด)
หมายเหตุ: สคริปต์ daemonize จะต้องจำสตริงคำสั่งที่เป็น daemonizing ดังนั้นถ้าสตริงคำสั่งเดียวกันถูก daemonized อีกครั้งจะไม่เรียกใช้สำเนาที่สอง
นอกจากนี้โซลูชันควรใช้ได้กับทั้ง OS X และ linux แต่ยินดีต้อนรับโซลูชันสำหรับอย่างใดอย่างหนึ่ง
แก้ไข: sudo daemonize myscript myargs
มันเป็นเรื่องดีถ้าคุณมีการเรียกมันด้วย
(ถ้าฉันคิดว่าทั้งหมดนี้ผิดหรือมีวิธีแก้ปัญหาบางส่วนที่รวดเร็วและสกปรกฉันก็ชอบที่จะได้ยินเช่นกัน)
PS: ในกรณีที่มีประโยชน์นี่เป็นคำถามที่คล้ายกันสำหรับ python
และนี้คำตอบของคำถามที่คล้ายกันมีสิ่งที่ดูเหมือนจะเป็นสำนวนที่มีประโยชน์สำหรับ demonizing รวดเร็วและสกปรกของสคริปต์โดยพลการ: