ฉันช่วยเพื่อนร่วมงานที่กำลังมีปัญหากับกระบวนการพื้นหลังที่กำลังจะตายเป็นระยะ
ฉันพบว่าพวกเขาเริ่มกระบวนการพื้นหลังด้วยการเข้าสู่เซิร์ฟเวอร์และดำเนินการ:
su - <user> -c '<command>' &
"Aha" ฉันอุทาน "ถ้าคุณเริ่มต้นคำสั่งด้วย" & "คำสั่งจะวางสายเมื่อคุณออกจากเทอร์มินัลการควบคุมคุณต้องใช้บางอย่างเช่น nohup เพื่อให้บรรลุสิ่งนี้จริง ๆ แล้วกระบวนการนี้ต้องรองรับการทำงานเป็น daemon, tut tut"
เราทดสอบคำสั่งข้างต้นเพื่อแสดงให้เห็นถึงจุดของฉันและ ... มันดูเหมือนจะทำงาน: กระบวนการเริ่มต้นโดยคำสั่งไม่ได้ออกเมื่อเราออกจากสถานีที่วิ่งคำสั่งดังกล่าว
commandเป็นสคริปต์ Python ที่กำหนดเองซึ่งเอาต์พุตไปที่ไฟล์ เท่าที่ฉันสามารถบอกได้ไม่มี "daemonize" ที่ชาญฉลาดเหมือนความสามารถในสคริปต์ มันไม่ได้ทำสิ่งใด ๆ ที่จำเป็นในการใช้งานเป็น daemon ที่ระบุไว้ในWikipedia: Daemon (คำนวณ):หน้าสร้าง
การรันคำสั่งเช่นนั้นจะทำงานตามที่คาดไว้:
<command> &
exit
ในกรณีข้างต้นกระบวนการพื้นหลังเริ่มต้นโดยคำสั่งออกเมื่อเราออกจากสถานี
คำถามของฉันคือ:
เกิดอะไรขึ้นเมื่อเราเพิ่ม "su - -c &" ที่ป้องกันไม่ให้กระบวนการออกจากเมื่อเครื่องของเราออก ฉันต้องการที่จะเข้าใจในรายละเอียดเกี่ยวกับสถานีควบคุมอินพุตมาตรฐานและเอาท์พุท ฯลฯ
นี่เป็นวิธีที่สมเหตุสมผลในการบรรลุเป้าหมายของการรันคำสั่งนี้เป็นกระบวนการพื้นหลังหรือไม่ ถ้าไม่ใช่เพราะอะไร
ฉันต้องการเผยแพร่แนวปฏิบัติที่ดีที่สุดภายใน บริษัท ของฉัน แต่ฉันต้องสามารถแสดงและสำรองข้อมูลคำแนะนำใด ๆ ที่ฉันทำ
ฉันยังต้องการที่จะเข้าใจสิ่งที่เกิดขึ้นอย่างแน่นอน
chroot --userspec root:root / sh -c "exec some_forever_process" &
ผมเคยเห็นรากทำผู้ใช้ งานกำลังเรียกใช้ในฐานะผู้ใช้เดียวกันโดยไม่มีความชัดเจนnohup
ก่อนหรือdisown
หลัง ดังนั้นสำหรับกรณีนี้มันไม่สามารถส่งสัญญาณในระยะทางออกได้อย่างไร