วิธี“ เหมาะสม” ในการรันเชลล์สคริปต์เป็น daemon
ฉันจะเขียนสคริปต์เชลล์ที่ผมอยากจะทำงานเป็นภูตในการเริ่มต้นโดยไม่ต้องใช้เครื่องมือภายนอกเช่นdaemontoolsหรือ daemonize Linux Daemon การเขียน HOWTO ตามที่ลินุกซ์ภูตเขียน HOWTOที่เหมาะสมภูตมีลักษณะดังต่อไปนี้: ส้อมจากกระบวนการหลัก ปิดทั้งหมดอธิบายไฟล์ (เช่นstdin, stdout, stderr) เปิดบันทึกสำหรับการเขียน (ถ้ากำหนดค่า) เปลี่ยนไดเรกทอรีการทำงานอย่างใดอย่างหนึ่งที่เป็นถาวร (ปกติ/) รีเซ็ตหน้ากากโหมดไฟล์ (umask) สร้างSession ID ที่ไม่ซ้ำกัน(SID) daemonizeบทนำ daemonizeบทนำไปไกลระบุว่าภูตทั่วไปเพิ่มเติม: ยกเลิกการเชื่อมโยงจากเทอร์มินัลการควบคุม (หากมี) และจะละเว้นสัญญาณเทอร์มินัลทั้งหมด ยกเลิกการเชื่อมโยงจากกลุ่มกระบวนการ จับ SIGCLD ฉันจะทำทั้งหมดนี้ในsh, dashหรือbashสคริปต์ด้วยเครื่องมือลินุกซ์ร่วมกันเท่านั้น? สคริปต์ควรสามารถทำงานบน distros ได้มากที่สุดโดยไม่ต้องมีซอฟต์แวร์เพิ่มเติมแม้ว่าDebianจะเป็นจุดสนใจหลักของเรา หมายเหตุ:ฉันรู้ว่ามีคำตอบมากมายในเครือข่ายStackExchange ที่แนะนำให้ใช้nohupหรือsetsidแต่วิธีการเหล่านี้ไม่ได้จัดการข้อกำหนดทั้งหมดข้างต้น แก้ไข: ภูต (7) manpageยังช่วยให้คำแนะนำบางส่วนแม้ดูเหมือนจะมีความแตกต่างบางอย่างระหว่างแบบเก่าSysVภูตและใหม่กว่าsystemdคน เนื่องจากความเข้ากันได้กับความหลากหลายของ distros เป็นสิ่งสำคัญโปรดตรวจสอบให้แน่ใจว่าคำตอบนั้นชัดเจนแตกต่างกัน