ฉันพยายามบังคับให้หน้าจอ GNU สร้างเทอร์มินัล "เสมือน" โดยไม่ต้องเชื่อมต่อกับมันรันสคริปต์ภายในและไม่หยุดเซสชันเมื่อสคริปต์สิ้นสุดลง
ฉันลองชุดค่าผสมมากมายรวมถึง:
screen -dmS udplistener /share/Sys/autorun/start_udp_listeners.sh
หรือ
screen -S udplistener -X /share/Sys/autorun/start_udp_listeners.sh
และไม่มีใครทำงาน ฉันได้รับเซสชันโดยไม่มีสคริปต์ที่ดำเนินการสคริปต์จะดำเนินการ แต่เซสชันจะสิ้นสุดลงเมื่อเสร็จสิ้นหรือฉันได้รับข้อผิดพลาด "ไม่พบเซสชันหน้าจอ"
สิ่งที่ฉันพยายามทำอยู่ก็คือรัน UDP listener ที่เขียนด้วย PHP และทำให้มันทำงานใน infinte loop (อย่าหยุดฟัง) ใช่ - ฉันสามารถเรียกใช้สคริปต์ PHP ด้วย&
ในตอนท้ายบังคับให้ PHP CLI ทำงานเป็น daemon ปัญหาคือว่าฉันกำลังใช้ชิ้นส่วนของขยะที่เรียกว่าเซิร์ฟเวอร์ (QNAP - ไม่เคยซื้อขยะนี้!) ซึ่งดูเหมือนจะไม่สนใจสิ่งนี้ ทันทีที่ฉันออกจากเซสชัน SSH สคริปต์จะหยุดทำงาน
ดังนั้นscreen
ดูเหมือนจะเป็นตัวเลือกเท่านั้น แต่ฉันไม่เข้าใจว่าทำไมมันถึงเลิกเซสชันเมื่อคำสั่งหรือสคริปต์สิ้นสุดลง
แก้ไข : ฉันได้ลองตัวอย่างที่พบในอินเทอร์เน็ต:
screen -dmS name
screen -S name -p windowname -X stuff 'mc
'
ไม่ขาด! หลังจากติดมัน ( screen -R name
) ฉันเห็นว่า Midnight Commander HASN'T ไม่ถูกประหารชีวิต แม้ว่าผู้เขียนตัวอย่างกล่าวว่ามันจะเป็น
screen
ปิด? BTW: ฉันยังไม่เข้าใจความคิด! ถ้าฉันโทรscreen -dmS name
ฉันจะสร้างหน้าต่างแยกออกซึ่งไม่มีอะไรเหลือให้ทำ แต่มันจะไม่ปิดอัตโนมัติ! แต่เมื่อฉันต้องการรันบางสิ่งในหน้าจอที่แยกออกมามันจะสิ้นสุดลงเมื่อการประมวลผลเสร็จสิ้น ทำไม? ฉันไม่เห็นเหตุผลที่นี่ มีหน้าต่างที่ไม่ทำอะไรเลย แต่ไม่มีหน้าต่างทำอะไรแล้วไม่ทำอะไรเลย?
&
ที่สิ้นสุด) เนื่องจากเซิร์ฟเวอร์รถ (QNAP) พวกเขากำลังจะสิ้นสุดลงเมื่อสิ้นสุดเซสชัน (ผมบอกพวกเขาควรจะไม่ได้อยู่ในลินุกซ์ปกติถ้าดำเนินการด้วย&
) ดังนั้นฉันไม่ต้องการทำอะไรหลังจากstart_udp_listeners.sh
เสร็จสิ้นมีเพียงวิธีการป้องกันไม่ให้เซสชั่นสิ้นสุดลง ตราบใดที่มันไม่เป็นเช่นนั้นผู้ฟัง PHP ของฉันก็ใช้งานได้ดี
screen
คุณสร้างเพียงหน้าต่างเดียวเพื่อเรียกใช้คำสั่งเดียว เมื่อคำสั่งออกจากหน้าต่างจะปิดและscreen
ไม่มีอะไรเหลือให้ทำดังนั้นจึงจะออก