ฉันจะได้รับหน้าจอเพื่อดำเนินการคำสั่งแล้วแยกออก (นั่นคือโดยอัตโนมัติในสคริปต์เดียวโดยไม่ต้องใส่เพิ่มเติมนอกเหนือจากการเริ่มต้นสคริปต์)? เช่นฉันใช้ myscript.sh และเริ่มเซสชันหน้าจอโดยอัตโนมัติดำเนินการคำสั่งแล้วแยกออก
ฉันจะได้รับหน้าจอเพื่อดำเนินการคำสั่งแล้วแยกออก (นั่นคือโดยอัตโนมัติในสคริปต์เดียวโดยไม่ต้องใส่เพิ่มเติมนอกเหนือจากการเริ่มต้นสคริปต์)? เช่นฉันใช้ myscript.sh และเริ่มเซสชันหน้าจอโดยอัตโนมัติดำเนินการคำสั่งแล้วแยกออก
คำตอบ:
นี่เป็นวิธีง่ายๆ:
screen -d -m yourcommand
screen yourcommand
โดยไม่ได้-d
และ-m
และดูวิธีการที่จะไปครั้งแรก
zombie
ตัวเลือกในหน้าจอ ใส่ในของคุณzombie xy
~/.screenrc
มันควรจะเป็นไปได้ที่จะเปิดใช้งานสำหรับเซสชั่นหนึ่งเพียงแค่ใส่zombie xy
ในไฟล์อื่นและใช้-c file
แต่ด้วยเหตุผลบางอย่างที่ไม่ทำงานเมื่อฉันลองมัน หรือเพียงแค่ใช้sh -c 'yourcommand;while :;do sleep 9999; done'
หากต้องการเรียกใช้คำสั่งเดียวในหน้าจอและถอดคุณอาจลอง:
screen -dm sleep 10
หากต้องการเรียกใช้หลายคำสั่งให้ลอง:
screen -dm bash -c "sleep 10; myscript.sh"
โปรดทราบว่าเมื่อโปรแกรมหยุดทำงานหน้าจอ (ต่อค่าเริ่มต้น) จะฆ่าหน้าต่างที่มีอยู่
หากคุณไม่ต้องการให้เซสชันถูกฆ่าหลังจากสคริปต์เสร็จสิ้นให้เพิ่มexec sh
ที่ส่วนท้ายเช่น:
screen -dm bash -c 'sleep 5; exec sh'
หากต้องการแสดงรายการเซสชันทั้งหมดของคุณลอง:
screen -list
ที่เกี่ยวข้อง: หน้าจอเริ่มต้น Unix, เรียกใช้คำสั่งถอด
-S sessionname
screen -dmS MyLongRunningScript bash -c "..."
เพื่อเริ่มเซสชันใหม่ในพื้นหลังด้วยชื่อ 'ง่วง'
screen -S sleepy -dm sleep 60
เพื่อที่จะฆ่าเซสชั่น 'ง่วงนอน'
screen -S sleepy -X quit
screen -S sleepy -dm "cd myfolder;sleep 60"
?
screen -dmS screen_session_name bash -c 'echo "doing stuff"; exec bash'
มันเกิดขึ้นกับฉันเมื่อฉันกดปุ่มควบคุม c (sig int) เพื่อออกจากโปรแกรมของฉัน มันออกจากทางทั้งหมดจากการทุบตีทั้งหมด ดังนั้นฉันจึงพบสิ่งนี้เพื่อจับ SIGINT และป้องกันการออกจากการทุบตีครั้งล่าสุด (ต้องพิมพ์ exit เพื่อออก)
screen -dmS "screenNameHere" bash -c "trap 'echo gotsigint' INT; cd /mydir ; my_command_here; bash"
example:
screen -dmS "status_updates" bash -c "trap 'echo gotsigint' INT; cd /opt/status_update ; forever index.js ; bash"
ฉันพบว่ามีประโยชน์ในการใช้ cron เพื่อเรียกใช้โปรแกรม nodejs เมื่อเริ่มต้น และเรียกใช้หน้าจอในเวลาบูต ใน cron มีไวยากรณ์เหตุการณ์พิเศษ @reboot เหตุการณ์
to edit cron, execute:
crontab -e
then type
@reboot screen -dmS "screenNameHere" bash -c "trap 'echo gotsigint' INT; cd /mydir ; my_command_here; bash"