วิธีการเรียกใช้สคริปต์ผ่าน SSH ที่ไม่สิ้นสุดเมื่อฉันปิดการเชื่อมต่อ?


18

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

มีวิธีการเรียกใช้สคริปต์ที่ไม่ได้ขึ้นอยู่กับเปลือกที่เริ่มมันได้หรือไม่

ฉันใช้ Ubuntu 9.04

คำตอบ:


24

คุณสามารถเรียกใช้คำสั่งด้วยคำสั่ง nohup ก่อนหน้าได้ นอกจากนี้คุณยังสามารถเรียกใช้งานได้ใน 'หน้าจอ' ซึ่งจะช่วยให้คุณสามารถเชื่อมต่อเครื่องได้

ตัวอย่างเช่น:

ssh mySever 'nohup bash myscript.sh'

หรือเพียงแค่ ssh เข้าและเรียกใช้คำสั่ง nohup ควรทำงานต่อไปแม้ในขณะที่คุณตัดการเชื่อมต่อ นี่เป็นเพราะ nohup จะสกัดกั้น SIGHUP singal (hangup)

หน้าจอมีส่วนเกี่ยวข้องเพิ่มขึ้นเล็กน้อย แต่ในเวลา 20 นาทีคุณอาจต้องเรียนรู้พื้นฐานมันเป็นเครื่องมือที่มีประโยชน์มากที่สุดอย่างหนึ่ง นี่คือการกวดวิชา


Sniped โดย Kyle ... > smile <
Evan Anderson

+1 ให้กับทุกคนที่ snipes Evan Happy 10K :)
squillman

1
ลิงก์ไปยังบทช่วยสอนใช้งานไม่ได้ :(
Ido Ran

7

ฉันมักจะใช้ nohup เสมอ หากฉันสนใจเกี่ยวกับผลลัพธ์ฉันจะเปลี่ยนเส้นทางไปยังล็อกไฟล์มิฉะนั้นฉันจะส่งไปที่ / dev / null

ตัวอย่าง:

nohup scp file.tar.gz root@someserver:/var/tmp > /dev/null 2>&1 &

มันวางไว้ในพื้นหลังโดยเอาท์พุทไปที่ / dev / null และเป็นภูมิคุ้มกันต่อสัญญาณ HUP หากคุณออกจากระบบ นอกจากนี้คุณยังสามารถ "ปฏิเสธ" งานที่มีเชลล์บางตัว (เช่นทุบตี) เพื่อที่จะไม่ได้เชื่อมต่อกับเซสชันของคุณ

disown %1

1
+1 สำหรับการปฏิเสธ - มีประโยชน์มากเมื่อคุณลืมที่จะเรียกใช้โดยใช้ nohup
ทำเครื่องหมาย

5

ในการติดตั้งหน้าจอ: apt-get install screen

จากนั้นเปิดใช้เพียง: screen

และman screenเพื่อให้ได้กุญแจที่มีผลผูกพัน


+1! จอเป็นสิ่งดา!
Javier

ฉันเคยใช้หน้าจอ แต่เปลี่ยนไปใช้ tmux ด้วยเหตุผลหลายประการ Google "tmux vs screen" และคุณจะพบลิงก์เช่นนี้: superuser.com/questions/236158/tmux-vs-screen
m0j0

2

ขณะที่คุณล็อกอินเข้าสู่เซิร์ฟเวอร์คุณสามารถเรียกใช้สคริปต์ในโหมดเดี่ยวได้โดยใช้คำสั่งต่อไปนี้:

nohup script >script.out 2>script.err &

ในภายหลังเมื่อคุณเข้าสู่ระบบอีกครั้งคุณสามารถตรวจสอบ script.out สำหรับผลลัพธ์ใด ๆ และ script.err สำหรับข้อความผิดพลาดใด ๆ หากคุณต้องการผลลัพธ์และข้อความผิดพลาดในไฟล์เดียวกันให้ทำ:

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