nohup จะไม่แสดงพร้อมต์ถัดไปในเซสชัน SSH

Aug 20 2020

สมมติว่าฉันเชื่อมต่อผ่าน SSH บนระบบ Ubuntu ระยะไกล ฉันต้องการเรียกใช้สคริปต์ที่นั่นโดยใช้nohupในกรณีที่การเชื่อมต่ออาจลดลงและเปลี่ยนเส้นทางบันทึกไปยังไฟล์ คำสั่งที่ฉันเรียกใช้คือ

nohup bash myscript.sh > log.txt &

จากนั้นเทอร์มินัลจะพิมพ์ PID ของสคริปต์และข้อความ:

nohup ไม่สนใจอินพุตและเปลี่ยนเส้นทาง stderr ไปที่ stdout

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

คำตอบ

1 roaima Aug 21 2020 at 03:39

คำสั่งนี้ทำงานในพื้นหลังตามที่คุณคาดหวัง อย่างไรก็ตามในกรณีนี้มีเงื่อนไขการแข่งขันที่ข้อความผลลัพธ์ถูกเขียนเป็นเศษส่วนหลังจากพร้อมต์เชลล์

ผลลัพธ์ที่เป็นภาพอาจเป็นได้ว่าพร้อมต์เชลล์นำหน้าnohupข้อความหรือถูกเขียนทับทั้งหมด

ผลลัพธ์ในทางปฏิบัติคือเนื่องจากเชลล์ได้เขียนพรอมต์จึงพร้อมสำหรับคำสั่งถัดไป คุณสามารถกด Enter เพื่อสร้างพรอมต์ใหม่หรือพิมพ์คำสั่งถัดไปก็ได้