Score:0

อย่าฆ่าสคริปต์ระยะไกลเมื่อกระบวนการของผู้โทรในเครื่องถูกฆ่า

ธง mg

ปัญหา

ฉันเรียกกระบวนการที่ใช้เวลานานผ่าน ssh และจำเป็นที่กระบวนการนี้จะไม่ถูกฆ่า ผู้ใช้อาจฆ่ากระบวนการเริ่มต้นบนโฮสต์ และฉันไม่สามารถทำอะไรกับมันได้

วิธีทำให้กระบวนการระยะไกลไม่ถูกฆ่าหากกระบวนการเริ่มต้นถูกฆ่า

ผู้ใช้ -> user.sh -> SSH-to-remote -> long-running.sh

จะต้อง:

  1. ส่งออกเอาต์พุตของรีโมตโปรเซส
  2. ออกเมื่อกระบวนการระยะไกลออก
  3. อย่าฆ่ากระบวนการระยะไกล เมื่อกระบวนการเริ่มต้นถูกฆ่า
  4. ทำให้ไฟล์บันทึกเอาต์พุตพร้อมใช้งาน

โซลูชันแรกที่ไม่สมบูรณ์

ฉันคิดเกี่ยวกับบางสิ่งบางอย่างโดยใช้ nohup แต่มันก็ไม่ได้ผล:

ผู้ใช้ -> user.sh -> SSH-to-remote -> init.sh -> long-running.sh

init.sh

#!/bin/bash
nohup ./long-running.sh >out.log 2>&1 </dev/null &
pid=$!
ปฏิเสธ $pid
หาง -f out.log &
รอ $pid

long-running.sh (เนื้อหาสำหรับการทดสอบ)

#!/bin/bash
สำหรับฉันใน $(seq 30)
ทำ 
    เสียงสะท้อน $i
    นอน1
เสร็จแล้ว

โซลูชันนี้ไม่สามารถแก้ปัญหา 2 ได้ ไม่ออกเมื่อกระบวนการระยะไกลออก

kanehekili avatar
zw flag
ฉันใช้ [tmux](https://man7.org/linux/man-pages/man1/tmux.1.html) หรือ systemctl หลังต้องการ servicefile ขนาดเล็ก [ตัวอย่าง] (https://askubuntu.com/a/1336578/906933) เพื่อเขียน
Score:0
ธง mg

ดูเหมือนว่าฉันพบวิธีแก้ปัญหา

init.sh

#!/bin/bash
nohup ./long-running.sh >out.log 2>&1 </dev/null &
pid=$!
ปฏิเสธ $pid
หาง --pid=$pid -f out.log

ในโซลูชันแรกของฉัน รอ ไม่รอเหมือน ปฏิเสธ เอา jobspec ออก หาง วิ่งตลอดไปและเปิดเซสชันไว้

ตอนนี้ รอ ถูกลบออกและ หาง รอให้กระบวนการออก การฆ่าจากโฮสต์ต้นทางจะฆ่าหาง แต่ไม่ได้ฆ่ากระบวนการที่ใช้เวลานาน

โพสต์คำตอบ

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