ฉันได้พบสิ่งนี้กับ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
ในการตรวจสอบสิทธิ์บนเซิร์ฟเวอร์ระยะไกล