การทำคำสั่งที่รันนานบน ssh


10

ฉันกำลังsshเข้าไปในเซิร์ฟเวอร์และฉันเริ่มสคริปต์ Python ที่จะใช้เวลาประมาณ 24 ชั่วโมงให้เสร็จสมบูรณ์ เกิดอะไรขึ้นถ้าการเชื่อมต่ออินเทอร์เน็ตของฉันเสียชีวิตกลาง นั่นจะหยุดคำสั่งหรือไม่

มีวิธีรันคำสั่งที่รันเป็นเวลานานของฉันในแบบที่การตัดการเชื่อมต่อแบบโลคัลจะไม่มีผลกับมันหรือไม่และฉันสามารถเห็นเอาต์พุตของมันได้หลังจากที่ฉันล็อกอินsshอีกครั้ง?

คำตอบ:


29

วิธีที่ดีที่สุดคือใช้screen(บนเซิร์ฟเวอร์) เพื่อเริ่มเซสชันเพื่อเรียกใช้คำสั่งจากนั้นยกเลิกการเชื่อมต่อหน้าจอดังนั้นมันจะยังคงทำงานต่อไปและคุณสามารถทำสิ่งอื่นหรือถอนการเชื่อมต่อจากเซิร์ฟเวอร์ ตัวเลือกอื่นคือการใช้nohupร่วมกับ&ดังนั้นคุณจะมีnohup <command> &


จอภาพ หรือคุณสามารถตั้งค่างาน cron หากสิ่งที่คุณทำงานมากกว่าหนึ่งครั้ง
xeon

2
หากคุณถูกตัดการเชื่อมต่อในขณะที่กำลังทำงานอยู่บนหน้าจอscreen -rจะทำการเชื่อมต่อคุณอีกครั้ง
dpflug

2

นอกจากนี้คุณยังสามารถใช้disownหากคุณเริ่มกระบวนการโดยไม่ใช้screenหรือไม่nohup


2

คำตอบที่มีอยู่สามารถทำงานได้ดี แต่ฉันต้องการบางอย่างสำหรับ BusyBox (เชลล์และชุดเครื่องมือสำหรับฮาร์ดแวร์ขั้นต่ำเช่นเราเตอร์ที่บ้าน) ระบบของฉันไม่ได้มีscreen, dtach, at, disownหรือแม้กระทั่งnohup! ขอบคุณ tbc0 บน SO ( ลิงก์ ) ฉันพบอัญมณีนี้ จะส่งคืนทันที แต่กระบวนการเซิร์ฟเวอร์ยังคงทำงานต่อไป:

ssh myserver 'sleep 100 >&- 2>&- <&- &'

หรือหากต้องการคำสั่งหลายคำสั่ง:

ssh myserver '(echo one; sleep 100; echo two; sleep 200) >&- 2>&- <&- &'

คำอธิบาย:

  • >&- - จับ stdout ปิด
  • 2>&- - stderr ปิด
  • <&- - ปิด stdin
  • & - ใส่กระบวนการในพื้นหลัง

สิ่งนี้ไม่ใช้โปรแกรมภายนอกและควรทำงานกับ ksh, ash, Bourne shell, bash และอื่น ๆ


1

หากคุณกำหนดกระบวนการและปิดเซสชันของคุณกระบวนการจะได้รับการรับรองโดย init (PID 1)

ถ้าฉันมีเซสชั่นและทำ:

]$ sleep 10000 &
]$ exit

และเปิดเซสชันอื่นแล้วเรียกใช้:

]$ ps -ef | grep sleep
501      26387     1  0 16:37 ?        00:00:00 sleep 10000
root     26422 21360  0 16:40 pts/0    00:00:00 grep sleep

กระบวนการของฉันยังคงทำงานอยู่และเราเห็นว่ากระบวนการหลักของมันคือ 1 (init)

หรือคุณสามารถตั้งค่าสคริปต์ของคุณเช่นเดียวกับคุณจะเป็นภูต ค้นหาอย่างรวดเร็วจะเปิดขึ้นนี้การเชื่อมโยงที่มีประโยชน์ดูเหมือน: http://onlamp.com/python/pythoncook2/solution.csp?day=1 หากคุณต้องการที่จะใช้วิธีการที่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.