ฉันได้พบสิ่งนี้กับrsyncในอดีตเช่นกัน โซลูชันที่แก้ไขสำหรับฉันคือการเรียกใช้จากภายในscreenเซสชันซึ่งสามารถช่วยรักษาการเชื่อมต่อกับเซิร์ฟเวอร์ระยะไกลได้
screen -LS rsync
[execute your rsync command]
Ctrl-A+D to detach from the session
คุณสามารถตรวจสอบสถานะโดยการเรียกใช้screen -x rsync(หรือสิ่งที่คุณตัดสินใจที่จะตั้งชื่อเซสชันถ้าคุณให้ชื่อซึ่งไม่จำเป็นต้องใช้) สิ่งนี้จะแนบเปลือกปัจจุบันของคุณเข้ากับเซสชันนั้นอีกครั้ง เพียงอย่าลืมถอดออกอีกครั้งหลังจากที่คุณตรวจสอบสถานะเพื่อให้มันทำงานในพื้นหลัง
นอกจากนี้คุณยังสามารถดำเนินการคำสั่งในการทำงานผ่านทางscreenในพื้นหลังในหนึ่งล้มเหลวถลาลงด้วยการทำ screen -dm 'command'[คนโปรดฉันที่ถูกต้องหากฉันผิด] คุณอาจต้องการman screenก่อนลองอันสุดท้าย
แก้ไข:
ฉันกำลังแก้ไขคำตอบของฉันเพราะคุณได้รับการยืนยันแล้วว่าไม่ได้screenให้ความช่วยเหลือในสถานการณ์นี้ แต่คุณตอบกลับความคิดเห็นของฉันที่แนะนำให้ลองscpดูว่าคุณได้รับผลลัพธ์ประเภทใดซึ่งคุณตอบว่าผิดปกติพอสมควร
ดังนั้นคำตอบใหม่ของฉันคือ: ใช้scp- หรือssh(พร้อมtar) - แทนrsync
จริงอยู่ที่scpไม่สนับสนุนจำนวนมากมายของคุณสมบัติเป็นrsyncแต่คุณต้องการจริงต้องแปลกใจที่จะค้นพบเพียงวิธีการหลายคุณสมบัติที่มันไม่สนับสนุนที่เกือบจะเหมือนกันrsyncกับที่ของ
สถานการณ์โลกแห่งความเป็นจริงสำหรับscpและทางเลือกอื่น ๆ ไปที่rsync:
ก่อนหน้านี้ฉันได้รับมอบหมายให้สร้างเชลล์สคริปต์ที่จะดึงบันทึกจากเซิร์ฟเวอร์การผลิตของเราและเก็บไว้ในเว็บเซิร์ฟเวอร์เพื่อให้นักพัฒนาสามารถเข้าถึงพวกเขาเพื่อการแก้ไขปัญหา หลังจากพยายามไม่ประสบความสำเร็จในการทำให้ทีม Unix ติดตั้งrsyncบนเซิร์ฟเวอร์ของเราฉันก็พบกับวิธีการแก้ปัญหาโดยใช้วิธีนี้scpได้ผลเช่นกัน
ที่ถูกกล่าวว่าฉันเพิ่งแก้ไขสคริปต์เพื่อให้มันใช้ทั้งหมดsshและtar- GNU tar/ gtarเป็นที่แน่นอน GNU tarสนับสนุนหลายตัวเลือกจริงที่คุณจะพบได้ในrsyncเช่น--include, --excludeได้รับอนุญาต / การเก็บรักษาแอตทริบิวต์การบีบอัดและอื่น ๆ
วิธีที่ฉันประสบความสำเร็จในตอนนี้คือการsshไปที่เซิร์ฟเวอร์ระยะไกล (ผ่าน pubkey auth) และการใช้gtar -czf - [other options such as --include='*.log' and --exclude='*core*', etc.]- นี่เป็นการเขียนข้อมูลทั้งหมดไปยังstdoutซึ่งจะถูกไพพ์[ภายใน] tar -xzfเพื่อไม่ให้มีการเปลี่ยนแปลงบนเซิร์ฟเวอร์ที่ใช้งานระยะไกล และไฟล์ทั้งหมดที่ถูกดึงไปยังเซิร์ฟเวอร์ท้องถิ่น มันเป็นทางเลือกที่ยอดเยี่ยมrsyncในกรณีนี้ สิ่งเดียวที่สำคัญไม่สนับสนุนtarหรือscpสำรองข้อมูลที่เพิ่มขึ้นและระดับของการตรวจสอบข้อผิดพลาดระดับบล็อกที่rsyncคุณสมบัติ
คำสั่งเต็มรูปแบบที่ฉันอ้างถึงเมื่อใช้sshและtarจะเป็นเช่นนี้ (ระยะไกลคือ Solaris 10; local เป็น Debian สำหรับสิ่งที่คุ้มค่า):
cd /var/www/remotelogs
ssh -C user@remotehost "cd /path/to/remote/app.directories; gtar -czf - --include='*.log' --exclude='*.pid' --exlude='*core*' *" | tar -xz
ในสถานการณ์ของคุณมันจะตรงกันข้าม - tar -cf -ในเครื่องและไปป์ที่เซิร์ฟเวอร์ระยะไกลผ่านssh user@remotehost "tar -xf -"- มีคำตอบอื่นที่อ้างอิงลักษณะการทำงานประเภทนี้ แต่ไม่ได้ลงรายละเอียดมากนัก
มีตัวเลือกอื่น ๆ ที่ฉันได้รวมไว้เพื่อเพิ่มความเร็ว ฉันจับเวลาทุกอย่างอย่างไม่ลดละเพื่อให้ได้เวลาในการดำเนินการที่ต่ำที่สุด คุณอาจคิดว่าการใช้การบีบอัดด้วยtarจะไม่มีประโยชน์ แต่จริง ๆ แล้วมันเร่งความเร็วขึ้นเล็กน้อยเช่นเดียวกับการใช้-Cแฟล็กด้วยsshเพื่อเปิดใช้การsshบีบอัดเช่นกัน ฉันอาจอัปเดตโพสต์นี้ในภายหลังเพื่อรวมคำสั่งที่แน่นอนที่ฉันใช้ (ซึ่งคล้ายกับสิ่งที่ฉันโพสต์) แต่ฉันไม่รู้สึกอยากได้ VPN ในขณะนี้ตั้งแต่ฉันหยุดพักผ่อนในสัปดาห์นี้
ใน Solaris 10 ฉันยังใช้-c blowfishเพราะมันเป็นรหัสที่เร็วที่สุดในการตรวจสอบความถูกต้องด้วยและยังช่วยเร่งความเร็วให้เร็วขึ้นอีกด้วย แต่ Solaris 11 ของเราไม่รองรับหรือปิดการใช้งานชุดรหัสนี้
นอกจากนี้หากคุณเลือกที่จะใช้ตัวเลือกssh/ tarมันเป็นความคิดที่ดีที่จะใช้โซลูชันดั้งเดิมของฉันในการใช้screenหากคุณทำการสำรองข้อมูลซึ่งจะใช้เวลาสักครู่ หากไม่ตรวจสอบให้แน่ใจว่าการตั้งค่า keepalive / timeout ในตัวคุณssh_configถูกปรับแต่งแล้วไม่อย่างนั้นมิฉะนั้นวิธีนี้จะทำให้ท่อแตกได้
แม้ว่าคุณจะไปกับscpฉันมักจะพบว่ามันจะเป็นวิธีที่ดีที่สุดที่จะใช้screenหรือtmuxเมื่อทำการดำเนินงานของการจัดเรียงนี้เป็นเพียงในกรณีที่ หลายครั้งที่ฉันไม่ปฏิบัติตามคำแนะนำของตัวเองและไม่สามารถทำสิ่งนี้ได้ แต่เป็นวิธีที่ดีที่จะใช้เครื่องมือเหล่านี้เพื่อให้แน่ใจว่างานระยะไกลจะไม่พลาดเนื่องจากการใช้งานเซสชั่นเชลล์ของคุณ
ฉันรู้ว่าคุณต้องการทราบสาเหตุที่แท้จริงของrsyncปัญหาของคุณ อย่างไรก็ตามหากสิ่งนี้สำคัญจริงๆนี่เป็นวิธีแก้ไขปัญหาสองอย่างที่คุณสามารถทดลองใช้ได้ในระหว่างนี้
kerberosในการตรวจสอบสิทธิ์บนเซิร์ฟเวอร์ระยะไกล