การทำให้แอป Java ทำงานต่อเนื่องเมื่อปิด SSH บน Google Cloud


12

ตอนนี้ฉันใช้งานแอพ Java โดย SSH-ing ไปยัง VM บน Google Cloud Compute ฉันออกคำสั่งให้เรียกใช้แอปและโหลดคอนโซล ทันทีที่ฉันยุติการเชื่อมต่อ SSH แอปจะปิดลง ฉันถือว่านี่เป็นเพราะคอนโซลถูกปิด

ฉันต้องการให้แอพนี้ (ซึ่งเป็นเซิร์ฟเวอร์) ยังคงอยู่หลังจากที่ฉันยกเลิก SSH และ ณ เวลาใด ๆ ฉันต้องการที่จะเชื่อมต่อกับคอนโซลและออกคำสั่งบนเซิร์ฟเวอร์อีกครั้ง


คำตอบ:


15

คุณระบุสิ่งนี้:

ฉันต้องการให้แอพนี้ (ซึ่งเป็นเซิร์ฟเวอร์) ยังคงอยู่หลังจากที่ฉันยกเลิก SSH และ ณ เวลาใด ๆ ฉันต้องการที่จะเชื่อมต่อกับคอนโซลและออกคำสั่งบนเซิร์ฟเวอร์อีกครั้ง

คลุมเครือเล็กน้อยในเป้าหมาย แต่ฉันจะแทงมัน!

หากต้องการเรียกใช้คำสั่งใด ๆ เป็นกระบวนการพื้นหลังบนเซิร์ฟเวอร์ Linux คุณควรnohupผนวกคำสั่งด้วยและผนวก&ท้าย

ดังนั้นคำสั่งสุดท้ายจะเป็น:

nohup [your command] &

nohupหมายถึงคำสั่งควรละเลย“แขวนอัพ” และเครื่องหมาย&ผนวกเข้ากับมันเป็นคำสั่งของเชลล์ที่บอกว่าระบบที่จะเรียกใช้คำสั่งเป็นกระบวนการพื้นหลัง ข้อมูลเพิ่มเติมเกี่ยวกับการใช้งานของมันสามารถพบได้ที่นี่

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


1
หากฉันต้องการกลับไปที่กระบวนการและป้อนคำสั่งลงในคอนโซล java ฉันจะทำอย่างไร
Noahb32

1
@ Noahb32 ทีนี้นี่จะเปิดตัวมันเป็นกระบวนการพื้นหลัง; ฉันใช้วิธีนี้เป็นส่วนใหญ่ในการเริ่มต้นกระบวนการแล้วลืมมัน หากคุณต้องการเริ่มคอนโซล Java ใหม่คุณสามารถทำเช่นนั้นได้เนื่องจากคุณกลับมาที่เชลล์ แต่บางทีคุณควรตรวจสอบการใช้screenแทนเพราะจะช่วยให้คุณกลับเข้าสู่เซสชันหลังจากเปิดตัวได้ คำถามของคุณตรงไปตรงมาเป็นสิ่งที่คลุมเครือดังนั้นถ้าคุณสามารถอธิบายได้อย่างชัดเจนนั่นอาจช่วยให้ชัดเจนขึ้น
JakeGould

1
ขอบคุณ! ฉันต้องการเพิ่มว่าคุณสามารถตรวจสอบผลลัพธ์จากเทอร์มินัลอื่น: เพียงทำงานtail -f nohup.outในงานเดียวกัน dir
naXa

3

มีอย่างน้อยสามวิธีที่จะทำนี้: nohup(ไม่มีวางสาย ') screen/ หรือtmux disownมันไม่ชัดเจนจากคำถามที่คุณต้องการเชื่อมต่อกับเซิร์ฟเวอร์และโต้ตอบกับภูตหลังจากที่คุณตัดการเชื่อมต่อ

หากเป็นกรณีนี้nohupและdisownจะไม่ตรงกันเมื่อคุณปล่อยกระบวนการ (แม้ว่าจะยังคงทำงานอยู่) tmux(และscreen) จะยังคงใช้คำแม้ว่าคุณ

สำหรับข้อมูลเพิ่มเติมคุณสามารถดูหน้าที่เกี่ยวข้อง:

man nohup
man tux

Bash บอกเลิก (สมมติว่าคุณใช้ Bash อยู่แม้ว่าเชลล์อื่น ๆ จะมีบางอย่างที่คล้ายกัน)


ดูเหมือนว่าไม่มีdisownคำสั่งบน Google Cloud อย่างน้อยอินสแตนซ์ที่ฉันใช้เริ่มต้นปี 2019 หรือปลายปี 2018 nohupคำสั่งใช้งานได้ดี แต่มันสร้างไฟล์พิเศษที่อาจไม่ต้องการ
trysis

1

ในการแยกแอปพลิเคชันออกจากเชลล์ที่ทำงานอยู่ทำให้ยังคงอยู่หลังจากเชลล์ออกให้ใช้nohupคำสั่ง

คุณเพียงแค่นำหน้าคำสั่งปกติของคุณด้วยnohupและมันควรจะทำงาน


0

นอกจากนี้ถ้า nohub ไม่ทำงานคุณสามารถใช้หน้าจอ :

 ssh into your remote box. 

พิมพ์หน้าจอจากนั้นเริ่มกระบวนการที่คุณต้องการ

Press Ctrl-A then Ctrl-D. 

สิ่งนี้จะแยกเซสชันหน้าจอออก แต่ปล่อยให้กระบวนการทำงาน ตอนนี้คุณสามารถออกจากระบบกล่องระยะไกล

If you want to come back later, log on again and type screen -r This will resume your screen session, and you can see the output

ของ

กระบวนการของคุณ

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