ฉันมีเชลล์สคริปต์ที่ฉันกำลังดึงไฟล์ *.gz ของเซิร์ฟเวอร์ระยะไกลโดยใช้คำสั่งด้านล่าง และหลังจาก scp ฉันกำลังดำเนินการคำสั่ง gunzip ปัญหาคือในขณะที่ทำ scp การเชื่อมต่อขาดหายไป ดังนั้นไฟล์ *.gz ที่ไม่สมบูรณ์จึงถูกบันทึกลงในไดเร็กทอรีเซิร์ฟเวอร์ในเครื่องของฉัน และเมื่อฉันพยายาม gunzip ในบรรทัดถัดไปด้านล่างคำสั่ง scp มันจะทำการ gunzip ไฟล์ได้สำเร็จและเมื่อฉันเปิดขึ้นมา ไฟล์มันมีค่าขยะ
scp ${HostUser}@${HostServer}:$4/*$no*.gz
gunzip
เมื่อฉันแก้ไขจุดบกพร่อง ฉันพบสาเหตุด้านล่าง: 1. การถ่ายโอนไฟล์ที่ไม่สมบูรณ์เนื่องจากการเชื่อมต่อขาดหายไป 2. ในขณะที่ดำเนินการคำสั่ง gunzip ด้วยตนเอง มันทำให้เกิดข้อผิดพลาดที่ไม่พบไฟล์สิ้นสุด ดังนั้นจึงสุ่มสร้างค่าขยะในไฟล์และสคริปต์ของฉันคือ ไปสู่ความสำเร็จอันไม่ถูกต้อง ดังนั้นคำถามของฉันคือ:
ฉันสามารถเก็บโค้ดส่งคืนของคำสั่ง scp ไว้เพื่อที่ฉันจะได้รู้ว่าการถ่ายโอนไฟล์เสร็จสิ้นแล้วหรือไม่ หากการถ่ายโอนไม่เสร็จสิ้นสคริปต์จะล้มเหลวเพื่อให้คำสั่ง gunzip ไม่ต้องพยายามเปิดไฟล์ที่ไม่สมบูรณ์และเก็บค่าขยะไว้หลัง gunzip สั่งการ
ฉันยังประสบปัญหาแปลก ๆ เช่นกันที่ในขณะที่รันคำสั่ง scp เป็นครั้งแรก การเชื่อมต่อขาดหายไป แต่เมื่อฉันสั่งการ scp อีกครั้งจากเซสชันเดียวกัน ก็ประสบความสำเร็จ แต่ในการผลิตทุกครั้งมันจะเป็นเซสชันใหม่ ดังนั้นเราจึงไม่สามารถมีงานล้มเหลวเป็นประจำได้ นอกจากนี้ยังมีไฟล์ใดไฟล์หนึ่งโดยเฉพาะ การเชื่อมต่อจะหายไปใน 5 วินาที ฉันตรวจสอบด้วยเซสชันการหมดเวลาเซิร์ฟเวอร์ระยะไกลคือ 5 นาที
โปรดแนะนำ