กู้คืนสคริปต์ที่รันจากเซสชันเทอร์มินัล


35

ดังนั้นฉันจึงใช้GNU Screenเพื่อจัดการสคริปต์ / โปรแกรมที่กำลังทำงานอยู่หลายรายการ มัลติเพล็กซ์และการถอดได้ค่อนข้างมีประโยชน์

ฉันลบสคริปต์ออกจากดิสก์และตอนนี้ฉันมีปัญหาในการค้นหาข้อมูลสำรอง อย่างไรก็ตามหนึ่งในเทอร์มินัลเซสชันกำลังดำเนินการสคริปต์ก่อนที่ไฟล์จะถูกลบและมันก็ยังทำงานได้ตามปกติ

มีวิธีการแย่งชิงเทอร์มินัลเซสชันที่กำลังเรียกใช้สคริปต์เพื่อกู้คืนเนื้อหาของไฟล์นี้หรือไม่?


คำตอบ:


61

ค้นหา pid ของสคริปต์โดยใช้ ps

ps -ef|grep script.sh
Fdo  8983  8463  0 12:28 pts/2    00:00:00 /bin/bash ./script.sh

ตรวจสอบ/proc/$PID/fd/; ควรมีลิงค์เสียไปยังไฟล์สคริปต์ แต่cat ควรใช้งานได้ (ในขณะที่สคริปต์กำลังทำงาน!):

cat /proc/8983/fd/255 
#!/bin/bash
# script contents!

โชคดี!


@mrc ฉันคิดว่าใช้งานได้เพราะเนื้อหาของไฟล์ถูกโหลดในหน่วยความจำ
c4f4t0r

คำแนะนำยอดเยี่ยม! มันเป็นคำเตือนที่ @fdo ต้องตั้งค่ารูทีนการสำรองข้อมูลที่ดีเพราะในครั้งต่อไปเขาอาจจะไม่โชคดี
Criggie

12
@ c4f4t0r ไม่มีส่วนเกี่ยวข้องกับการโหลดในหน่วยความจำหรือไม่ ลินุกซ์จะไม่ลบไฟล์ (inode) อย่างชัดเจนในขณะที่มีการจัดการแบบเปิด - ไฟล์จะยังคงอยู่บนดิสก์ทำให้มีพื้นที่ว่างมากขึ้น rmและเครื่องมืออื่น ๆยกเลิกการลิงก์ไฟล์โดยลบลิงก์จากชื่อไฟล์ไปยังข้อมูลจริง (อ้างอิงโดย inode) แต่ตราบใดที่มีการอ้างอิงอยู่ (ฮาร์ดลิงก์หรือตัวจัดการเปิด) inode จะไม่ถูกลบ
Bob

แค่อยากรู้อยากเห็น ... คุณรู้จักวิธีตรวจสอบ fd 255 ได้อย่างไร หรือว่าเป็นเพียงตัวอย่าง?
Gardenhead

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