Nohup กว่า ssh จะไม่กลับมา


11

ฉันกำลังพยายามทำ

[me@myPc]$ ssh me@server "nohup myBashScript.sh &"

เป้าหมายของฉันคือเปิดใช้งานกระบวนการบนเซิร์ฟเวอร์จากนั้นส่งคืนทันที

มันไม่ทำงาน: งานเริ่มต้นบนเซิร์ฟเวอร์ แต่ฉันยังได้รับผลลัพธ์ใน myPc และ bash รอให้เสร็จก่อนที่จะถามฉันสำหรับคำสั่งอื่น

ทำไม มันไม่ควรที่จะ! มีวิธีใดบ้างที่จะหลีกเลี่ยงสิ่งนั้น?

  • myPc คือ RHEL6.2
  • เซิร์ฟเวอร์คือubuntu 10.04และ
  • ทั้งสองวิ่ง openssh

คำตอบ:


12

ตราบใดที่อินพุตหรือเอาต์พุตยังคงเปิดอยู่ ssh จะเปิดการเชื่อมต่อต่อไป เพื่อแก้ปัญหานี้ตรวจสอบให้แน่ใจว่าอินพุตและเอาต์พุตไม่เปิด

ตัวอย่างเช่นใช้ssh -nและเปลี่ยนเส้นทางผลลัพธ์ของคุณ:

ssh -n me@example.com "nohup myscript.sh >/dev/null 2>&1 &"

จะทำอย่างไรถ้าฉันยังต้องการmyscript.shให้ผลลัพธ์ แต่เซสชัน ssh ยังคงยุติลงหลังจากสคริปต์เสร็จสิ้นแล้ว ในกรณีของฉันสคริปต์ตัวเองเริ่มกระบวนการ nohup แล้วส่งกลับ ฉันอยู่ภายใต้ความประทับใจที่ssh -Tจะช่วยฉันทำอย่างนั้น
Gauthier

@Gauthier จากนั้นเพียงเรียกใช้สคริปต์โดยไม่ต้องไม่มี
Michael Hampton

ฉันทำ. สคริปต์เริ่มคำสั่งอื่นด้วย nohup และ & จากนั้นยกเลิก แต่ ssh ไม่กลับมา คำสั่งที่เรียกว่าในสคริปต์เปลี่ยนเส้นทาง stdout ไปยังไฟล์ โอ้ แต่ไม่ใช่ stderr และ stdin อาจเป็นเพราะอะไร
Gauthier

ที่นั่นคุณมีมัน! จะต้องเปลี่ยนเส้นทางอินพุตและเอาต์พุต
Michael Hampton

สิ่งที่ฉันไม่เข้าใจคือถ้าฉันเข้าสู่ระบบจริงและได้รับ tty เริ่มสคริปต์ที่เริ่ม nohup & คำสั่งจากนั้นฉันได้รับอนุญาตให้ออกจากระบบจากเซสชั่น ssh ไม่บ่นว่ามีอินพุตและเอาต์พุตเปิดอยู่ นั่นssh -tคือสิ่งที่ควรจะเลียนแบบ?
Gauthier
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.