ชื่อเดิมชื่อ restic-systemd-automatic-backup
รวมถึงผู้มีส่วนร่วมชั้นนำเหล่านี้:
Restic เป็นเครื่องมือบรรทัดคำสั่งสำหรับการสำรองข้อมูลวิธีที่ถูกต้อง ตรวจสอบเว็บไซต์อย่างเป็นทางการสำหรับคำอธิบายคุณสมบัติ ในฐานะที่เป็นแบ็กเอนด์ที่เก็บข้อมูลฉันขอแนะนำ Backblaze B2 เนื่องจาก Restic ทำงานได้ดีกับมันและมันก็เป็น (ในเวลาที่เขียน) ราคาไม่แพงมากสำหรับแฮ็กเกอร์งานอดิเรก! (เรื่องเล็ก ๆ น้อย ๆ : ฉันจ่ายเงินสำหรับการสำรองข้อมูลเต็มระบบในแต่ละเดือนโดยทั่วไป <1 USD)
น่าเสียดายที่ Resterc ไม่ได้กำหนดค่าไว้ล่วงหน้าด้วยวิธีการสำรองข้อมูลอัตโนมัติพูดทุกวัน อย่างไรก็ตามเป็นไปได้ที่จะตั้งค่าสิ่งนี้ด้วยตัวเองโดยใช้เครื่องมือในตัวในระบบปฏิบัติการและเครื่องห่อ สำหรับ Linux ด้วย SystemD นั้นสะดวกในการใช้ตัวจับเวลา SystemD สำหรับระบบ MacOS เราสามารถใช้ launchagents ในตัว สำหรับ Windows เราสามารถใช้ ScheduleDTasks ระบบปฏิบัติการใด ๆ ที่มีบางสิ่งบางอย่างเหมือน cron ก็จะได้ผลเช่นกัน!
ที่นี่เป็นไปตามขั้นตอนการสอนขั้นตอนเกี่ยวกับวิธีการตั้งค่าด้วยสคริปต์ตัวอย่างและการกำหนดค่าของฉันที่คุณสามารถปรับเปลี่ยนให้เหมาะกับความต้องการของคุณ
หมายเหตุคุณสามารถใช้แบ็กเอนด์ที่จัดเก็บข้อมูลที่รองรับของ Restic ได้ การตั้งค่าควรจะคล้ายกัน แต่คุณจะต้องใช้ตัวแปรการกำหนดค่าอื่น ๆ เพื่อให้ตรงกับแบ็กเอนด์ที่คุณเลือก
UPDATE: โครงการนี้เสร็จสมบูรณ์คุณสมบัติ (ดูเหตุผลด้านล่าง) จะยอมรับการแก้ไขข้อผิดพลาดเท่านั้น อย่าลังเลที่จะแยกถ้าคุณต้องการเพิ่มคุณสมบัติเพิ่มเติม การเป็นฐานฟอร์กเป็นขอบเขตเริ่มต้นของโครงการนี้!
ขอบเขตสำหรับสิ่งนี้ไม่ได้เป็นโซลูชันซุปเปอร์เต็มรูปแบบที่แก้ปัญหาทั้งหมดและการตั้งค่าที่เป็นไปได้ทั้งหมด จุดมุ่งหมายคือการเป็นฐานรหัสที่แฮ็กได้เพื่อให้คุณเริ่มเย็บโซลูชันการสำรองข้อมูลที่สมบูรณ์แบบซึ่งเหมาะกับความต้องการของคุณ!
อย่างไรก็ตามโครงการควรทำงานนอกกรอบน้อยที่สุด แต่ยังคงเปิดประตูสำหรับการกำหนดค่าและส่วนขยายโดยผู้ใช้
ในการใช้แบ็กเอนด์ที่เก็บข้อมูลที่แตกต่างจาก B2 คุณควรปรับแต่งตัวแปรการตั้งค่าสองสามตัวในโปรไฟล์การสำรองข้อมูลรวมถึงข้อโต้แย้งบางส่วนใน restic_backup.sh
☝ หมายเหตุ การตั้งค่า Linux ที่นี่จะถือว่าการติดตั้งเป็น /
การแจกแจง Linux จำนวนมากในปัจจุบันใช้ SystemD ซึ่งมีการสนับสนุนที่ดีสำหรับบริการที่ใช้งานและงานที่กำหนด หากการแจกแจงของคุณไม่ได้อยู่ใน SystemD ให้ตรวจสอบการตั้งค่า cron แทน
tl; dr setup
make : $ sudo make install-systemd$ yay -S restic-automatic-backup-scheduler/etc/resticrestic(1) คำสั่งทั้งหมดหลังจากนี้จะถือว่าโปรไฟล์มีที่มาในเชลล์ปัจจุบัน # source /etc/restic/default.env.sh
# restic initOnCalendar ใน /usr/lib/systemd/system/[email protected]# systemctl enable --now [email protected]# journalctl -f --lines=50 -u restic-backup@default# restic snapshots# systemctl enable --now [email protected]default.env.sh และใช้ชื่อโปรไฟล์ที่กำหนดแทน default เพื่อเรียกใช้การสำรองข้อมูลหรือเปิดใช้งานตัวจับเวลา สังเกตว่าค่าหลังจาก @ ทำงานเป็นพารามิเตอร์ # systemctl enable restic-backup@other_profile.timer ☝ หมายเหตุ การตั้งค่า MacOS ที่นี่จะถือว่าการติดตั้ง Homebrew ไปยังตำแหน่งเริ่มต้นที่แนะนำ นี่คือ $HOMEBREW_PREFIX ( brew --prefix ) ซึ่งคือ /usr/local บน Intel Macs และ /opt/homebrew บน Apple Silicon
Launchd เป็นตัวกำหนดตารางบริการในตัวที่ทันสมัยใน MacOS มันมีการสนับสนุนสำหรับการรันบริการเป็นรูท (daemon) หรือเป็นผู้ใช้ปกติ (ตัวแทน) ที่นี่เราตั้งค่า Launchagent เพื่อเรียกใช้เป็นผู้ใช้ปกติของคุณสำหรับการเริ่มต้นการสำรองข้อมูลปกติ
tl; dr setup
$ brew install erikw/tap/restic-automatic-backup-schedulermake : $ make PREFIX=$(brew --prefix) install-launchagent$(brew --prefix)/etc/resticrestic(1) คำสั่งทั้งหมดหลังจากนี้จะถือว่าโปรไฟล์มีที่มาในเชลล์ปัจจุบัน $ source $(brew --prefix)/etc/restic/default.env.sh
$ restic initOnCalendar ใน~/Library/LaunchAgents/homebrew.mxcl.restic-automatic-backup-scheduler.plistmake ตั้ง: ~/Library/LaunchAgents/com.github.erikw.restic-backup.plist$ brew services start restic-automatic-backup-schedulermake ตั้ง: $ launchctl bootstrap gui/ $UID ~ /Library/LaunchAgents/com.github.erikw.restic-backup.plist
$ launchctl enable gui/ $UID /com.github.erikw.restic-backup
$ launchctl kickstart -p gui/ $UID /com.github.erikw.restic-backup$ make activate-launchagent-backup$ tail -f ~ /Library/Logs/restic/backup *$ restic snapshots$ brew services start restic-automatic-backup-scheduler-checkmake ตั้ง: $ launchctl bootstrap gui/ $UID ~ /Library/LaunchAgents/com.github.erikw.restic-check.plist
$ launchctl enable gui/ $UID /com.github.erikw.restic-check
$ launchctl kickstart -p gui/ $UID /com.github.erikw.restic-check$ make activate-launchagent-checkจากนั้นควบคุมบริการด้วย homebrew:
$ brew services start restic-automatic-backup-scheduler
$ brew services restart restic-automatic-backup-scheduler
$ brew services stop restic-automatic-backup-scheduler หาก services start ล้มเหลวอาจเกิดจากการติดตั้งเวอร์ชันก่อนหน้า ในกรณีนั้นลบเวอร์ชันที่มีอยู่แล้วลองอีกครั้ง:
$ launchctl bootout gui/ $UID /com.github.erikw.restic-backup
$ brew services start restic-automatic-backup-scheduler ใช้คำสั่ง disable เพื่อหยุดชั่วคราวชั่วคราวหรือ bootout เพื่อถอนการติดตั้ง
$ launchctl disable gui/$UID/com.github.erikw.restic-backup
$ launchctl bootout gui/$UID/com.github.erikw.restic-backup
หากคุณอัปเดตไฟล์ .plist คุณจะต้องออก bootout ตามด้วย bootrstrap และ enable คำสั่งย่อยของ launchctl สิ่งนี้จะรับประกันได้ว่าไฟล์จะถูกโหลดซ้ำอย่างถูกต้อง
Windows มาพร้อมกับตัวกำหนดตารางงานในตัวที่เรียกว่า ScheduledTask แอพส่วนหน้าคือ "Task Scheduler" ( taskschd.msc ) และเราสามารถใช้คำสั่ง PowerShell เพื่อติดตั้งงานที่กำหนดเวลาใหม่
ฉันอธิบายที่นี่หนึ่งในเดือนพฤษภาคมที่คุณจะได้รับการปรับแต่งและสคริปต์สำรองข้อมูลนี้ทำงานบน Windows ที่นี่ฉันเลือกที่จะทำงานกับ scoop และ git-bash
tl; dr setup
pwsh เพื่อให้สามารถเรียกใช้ PowerShell ในสคริปต์ Shebang powershell> scoop install restic make git pwsh powershell> git-bash
git-bash$ mkdir ~/src && cd ~/src/
git-bash$ git clone https://github.com/erikw/restic-automatic-backup-scheduler.git && cd $(basename "$_" .git) git-bash$ make install-schedtask/etc/restic git-bash$ vim /etc/restic/*default.env.sh คุณอาจมี export RESTIC_BACKUP_PATHS= ' /c/Users/<username>/My Documents 'restic(1) คำสั่งทั้งหมดหลังจากนี้จะถือว่าโปรไฟล์มีที่มาในเชลล์ปัจจุบัน git-bash$ source /etc/restic/default.env.sh
git-bash$ restic init git-bash$ restic_backup.sh git-bash$ restic snapshotstaskschd.msc )restic_backup และคลิก "เรียกใช้"make install-schedtask : เพียงแค่ปิดและเริ่มต้นใหม่อีกครั้งเพื่อรีเฟรชrestic_backup.sh และในครั้งต่อไปที่กำหนดการที่กำหนดค่าไว้! ด้วย taskschd.msc คุณสามารถเริ่มหยุดลบลบและกำหนดค่างานที่กำหนดตามความชอบของคุณ:
☝ โปรดทราบว่า มีการใช้งาน cron ที่แตกต่างกันมากมายและพวกเขาทั้งหมดทำงานแตกต่างกันเล็กน้อย
ระบบใด ๆ ที่มีระบบเหมือน cron สามารถตั้งค่าการสำรองข้อมูลได้อย่างง่ายดายเช่นกัน อย่างไรก็ตามหากระบบของคุณรองรับการตั้งค่าก่อนหน้านี้แนะนำให้ใช้งานผ่าน cron เนื่องจากมีคุณสมบัติและความน่าเชื่อถือเพิ่มเติมสำหรับการสำรองข้อมูลของคุณ
tl; dr setup
$ sudo make install-cron/etc/cron.d/ หากไม่เป็นเช่นนั้นเพียงแค่คัดลอกเนื้อหาที่เกี่ยวข้องของ /etc/cron.d/restic ที่ติดตั้งไปยัง /etc/crontab ของคุณ # grep " ^@.*restic_ " /etc/cron.d/restic >> /etc/crontab/etc/resticrestic(1) คำสั่งทั้งหมดหลังจากนี้จะถือว่าโปรไฟล์มีที่มาในเชลล์ปัจจุบัน # source /etc/restic/default.env.sh
# restic init # restic_backup.sh# restic snapshots/etc/cron.d/restic (หรือ /etc/crontab )
นี่เป็นคำอธิบายโดยละเอียดมากกว่า TL; DR ส่วนด้านบนที่จะให้ความเข้าใจในการตั้งค่ามากขึ้น ส่วนนี้เป็นเรื่องทั่วไปมากกว่า แต่ใช้ Linux + SystemD เป็นตัวอย่างการตั้งค่า
$ git clone https://github.com/erikw/restic-automatic-backup-scheduler.git && cd $( basename " $_ " .git )ทำการค้นหาอย่างรวดเร็วและแทนที่ในไฟล์ต้นฉบับ:
$ find bin etc usr Library ScheduledTask -type f -exec sed -i.bak -e ' s|{{ INSTALL_PREFIX }}||g ' {} ; -exec rm {}.bak ;และตอนนี้คุณควรเห็นว่าไฟล์ทั้งหมดมีการเปลี่ยนแปลงเช่น
- export RESTIC_PASSWORD_FILE="{{ INSTALL_PREFIX }}/etc/restic/pw.txt"
+ export RESTIC_PASSWORD_FILE="/etc/restic/pw.txt" ทำไม TL เฉพาะ TL; DR Setups ด้านบนทั้งหมดใช้ MakeFile หรือ Package Manager เพื่อติดตั้งไฟล์เหล่านี้ สตริงตัวยึด {{ INSTALL_PREFIX }} อยู่ในไฟล์ต้นฉบับด้วยเหตุผลการพกพาเพื่อให้ MakeFile สามารถรองรับระบบปฏิบัติการที่แตกต่างกันทั้งหมด make ผู้ใช้สามารถตั้ง $PREFIX ที่แตกต่างกันเมื่อติดตั้งเช่น PREFIX=/usr/local make install-systemd
ในการตั้งค่าด้วยตนเองโดยละเอียดนี้เราจะคัดลอกไฟล์ทั้งหมดไปยัง /etc และ /bin ด้วยตนเอง ดังนั้นเราจำเป็นต้องลบสตริงตัวยึด {{ INSTALL_PREFIX }} ในไฟล์ต้นฉบับเป็นขั้นตอนแรก
ในระยะสั้น:
ก่อนอื่นให้ดูบทช่วยสอน Backblaze อย่างเป็นทางการเกี่ยวกับ Restic และทำตามคำแนะนำ ("สร้างบัญชี Backblaze ด้วย B2 ที่เปิดใช้งาน") ที่นั่นเกี่ยวกับวิธีการสร้างถัง B2 ใหม่ โดยทั่วไปคุณต้องการถังส่วนตัวโดยไม่มีการเข้ารหัส B2 (restic ทำฝั่งไคลเอ็นต์เข้ารหัสสำหรับเรา) และไม่มีคุณสมบัติล็อควัตถุ
เพื่อให้สามารถเชื่อมต่อกับถังของคุณได้คุณต้องการในการตั้งค่า B2 สร้าง KeyID และ ApplicationKey คู่หนึ่ง เป็นความคิดที่ดีที่จะสร้าง ID และคีย์ที่แยกต่างหากสำหรับแต่ละถังที่คุณจะใช้ด้วยการอ่านและเขียนที่ จำกัด การเข้าถึงเฉพาะถังนั้น
ใส่ไฟล์เหล่านี้ใน /etc/restic/ :
_global.env.sh : กรอกไฟล์นี้ด้วยการตั้งค่าทั่วโลกของคุณรวมถึง B2 KeyId & ApplicationKeydefault.env.sh : นี่คือโปรไฟล์เริ่มต้น กรอกข้อมูลนี้ด้วยชื่อถังเส้นทางสำรองและนโยบายการเก็บรักษา แหล่งที่มาของไฟล์นี้ _global.env.sh และมีอยู่ในตัวเองและสามารถจัดหาในเชลล์เมื่อคุณต้องการออกคำสั่ง restic ด้วยตนเอง ตัวอย่างเช่น: $ source /etc/restic/default.env.sh
$ restic snapshots # You don't have to supply all parameters like --repo, as they are now in your environment!pw.txt : ไฟล์นี้ควรมีรหัสผ่าน restic (บรรทัดเดียว) ที่ใช้ในการเข้ารหัสที่เก็บ นี่คือรหัสผ่านใหม่สิ่งที่จะใช้ในไม่ช้าเมื่อเริ่มต้นที่เก็บข้อมูลใหม่ มันควรจะไม่ซ้ำกันกับที่เก็บข้อมูลสำรอง restic นี้และจำเป็นสำหรับการกู้คืนจากมัน อย่าใช้รหัสผ่านเข้าสู่ระบบ B2 ของคุณอีกครั้งซึ่งควรแตกต่างกัน ตัวอย่างเช่นคุณสามารถสร้างรหัสผ่านอักขระ 128 ตัว (ต้องอยู่ในบรรทัดเดียว) ด้วย: $ openssl rand -base64 128 | tr -d ' n ' > /etc/restic/pw.txtbackup_exclude.txt : รายการรูปแบบไฟล์ที่จะละเว้น สิ่งนี้จะลดขนาดการสำรองข้อมูลและความเร็วของการสำรองข้อมูลจำนวนมากเมื่อทำอย่างถูกต้อง! ตอนนี้เราต้องเริ่มต้นที่เก็บข้อมูลในตอนท้ายระยะไกล:
$ sudo -i
# source /etc/restic/default.env.sh
# restic init ใส่ไฟล์นี้ใน /bin :
restic_backup.sh : สคริปต์ที่กำหนดวิธีเรียกใช้การสำรองข้อมูล ความตั้งใจคือคุณไม่จำเป็นต้องแก้ไขสคริปต์นี้ด้วยตัวเอง แต่สามารถควบคุมทุกอย่างได้จากโปรไฟล์ *.env.sh การสนับสนุนแบบ restic ไม่รวมไฟล์ พวกเขาแสดงรายการเส้นทางรูปแบบไฟล์เพื่อแยกออกจากการสำรองข้อมูลของคุณไฟล์ที่เพิ่งครอบครองพื้นที่จัดเก็บข้อมูลเวลาสำรองเครือข่ายและเงิน restic_backup.sh อนุญาตให้มีไฟล์ยกเว้นที่แตกต่างกันสองสามไฟล์
/etc/restic/backup_exclude.txt - รายการยกเว้นทั่วโลก คุณสามารถใช้สิ่งนี้ได้หากการตั้งค่าของคุณง่าย สิ่งนี้ถูกตั้งค่าใน _global.env.sh หากคุณต้องการไฟล์อื่นสำหรับโปรไฟล์อื่นคุณสามารถแทนที่ Envvar RESTIC_BACKUP_EXCLUDE_FILE ในโปรไฟล์นี้.backup_exclude.txt ต่อเส้นทางการสำรองข้อมูล หากคุณมีเช่นดิสก์ USB ที่ติดตั้ง AT/MNT/Media และเส้นทางนี้รวมอยู่ใน $RESTIC_BACKUP_PATHS คุณสามารถวางไฟล์ /mnt/media/.backup_exclude.txt และจะหยิบขึ้นมาโดยอัตโนมัติ สิ่งที่ดีเกี่ยวกับเรื่องนี้คือเส้นทางการสำรองข้อมูลมีอยู่ในตัวเองในแง่ของสิ่งที่พวกเขาแยกออก! ตอนนี้ดูว่าการสำรองข้อมูลนั้นใช้งานได้หรือไม่โดยการทำงานเป็นรูท
# source /etc/restic/default.env.sh
# /bin/restic_backup.sh เนื่องจาก default.env.sh มีที่มาอยู่ในเชลล์รูทของคุณแล้วตอนนี้คุณสามารถแสดงรายการ snapshost
# restic snapshots หรือคุณสามารถติดตั้งสแน็ปช็อต restic กับชุดไดเรกทอรี /mnt/restic
# restic mount /mnt/restic
# ls /mnt/restic การตั้งค่าระบบปฏิบัติการทั้งหมดแตกต่างกันไปในตัวกำหนดตารางเวลาที่ใช้งาน เป็นการสาธิตลองมาดูกันว่าเราสามารถทำสิ่งนี้กับ SystemD ได้อย่างไรภายใต้ Linux ที่นี่
ใส่ไฟล์เหล่านี้ใน /etc/systemd/system (โปรดทราบว่า makefile ติดตั้งเป็นแพ็คเกจ to /usr/lib/systemd/system )
[email protected] : บริการที่เรียกสคริปต์สำรองด้วยโปรไฟล์ที่ระบุ โปรไฟล์ถูกระบุโดยค่าหลังจาก @ เมื่อรัน (ดูด้านล่าง)[email protected] : ตัวจับเวลาที่เริ่มต้นการสำรองข้อมูลในอดีตทุกวัน (สิ่งเดียวกันเกี่ยวกับโปรไฟล์ที่นี่)OnCalendar ในไฟล์ตอนนี้เพียงแค่เปิดใช้งานตัวจับเวลาด้วย:
# systemctl enable --now [email protected]คุณสามารถดูได้ว่าการสำรองข้อมูลครั้งต่อไปของคุณจะทำงานเมื่อใด
# systemctl list-timers | grep resticและดูสถานะของการสำรองข้อมูลที่กำลังทำงานอยู่ในปัจจุบันด้วย:
# systemctl status restic-backupหรือเริ่มการสำรองข้อมูลด้วยตนเอง:
$ systemctl start restic-backup@defaultคุณสามารถติดตามการสำรองข้อมูล stdout live live เนื่องจากการสำรองข้อมูลกำลังทำงานด้วย:
$ journalctl -f -u [email protected] (ข้าม -f เพื่อดูการสำรองข้อมูลทั้งหมดที่ทำงาน)
นาน ๆ ครั้งมันอาจเป็นการดีที่จะตรวจสอบสุขภาพของที่เก็บระยะไกลเพื่อให้แน่ใจว่ามันจะไม่เสียหาย สามารถทำได้ด้วย $ restic check
มีสคริปต์สหายบริการและตัวจับเวลา ( *check* ) ไปยัง restic-backup.sh ที่ตรวจสอบการสำรองข้อมูลการสำรองสำหรับข้อผิดพลาด; ดู repo ใน usr/lib/systemd/system/ และ bin/ และคัดลอกสิ่งที่คุณต้องการไปยังตำแหน่งที่เกี่ยวข้อง
# systemctl enable --now [email protected] 
หากต้องการมีงานสำรองข้อมูลที่แตกต่างกันซึ่งมีถังที่แตกต่างกันเส้นทางการสำรองข้อมูลของกำหนดเวลาเพียงทำสำเนาของ default.env.sh และใช้ชื่อโปรไฟล์ที่กำหนดไว้แทน default ในขั้นตอนก่อนหน้า
ในการสร้างการสำรองข้อมูลที่แตกต่างกันและใช้งานคุณสามารถทำได้:
# cp /etc/restic/default.env.sh /etc/restic/other.env.sh
# vim /etc/restic/other.env.sh # Set backup path, bucket etc.
# source /etc/restic/other.env.sh
# restic_backup.sh เมื่อเปิดใช้งานจะเขียนลงในไฟล์บันทึก CSV สถิติหลังจากการสำรองข้อมูลแต่ละครั้ง สามารถเปิดใช้งานได้โดยการเขียนบทไม่มีตัวแปร env ( RESTIC_BACKUP_STATS_DIR ) บนไฟล์สภาพแวดล้อมทั่วโลกหรือกำหนดไว้ในโปรไฟล์เฉพาะ
บันทึกสถิติ (เช่นเดียวกับ) การแจ้งเตือนบนเดสก์ท็อปเกิดขึ้นในการดำเนินการเพิ่มเติมของ restic snapshots และ restic diff การดำเนินการนี้แบ่งปันกับการแจ้งเตือน (ไม่มีการวิ่งเพิ่มเติม)

เป็นความคิดที่ดีที่จะอยู่ด้านบนของการสำรองข้อมูลของคุณเพื่อให้แน่ใจว่าพวกเขาจะไม่เพิ่มขนาดมากและมีค่าใช้จ่ายสูง อย่างไรก็ตามมันเป็นเรื่องยากที่จะทำการแจ้งเตือน GUI อย่างถูกต้องจากกระบวนการที่ไม่ใช่ผู้ใช้ (เช่นรูท)
ดังนั้นโครงการนี้จึงให้บริการโซลูชันที่มีน้ำหนักเบาสำหรับการแจ้งเตือนเดสก์ท็อปที่ใช้งานได้เช่นนี้: โดยทั่วไป restic_backup.sh จะผนวกบรรทัดสรุปของการสำรองข้อมูลล่าสุดไปยังไฟล์ที่ผู้ใช้เป็นเจ้าของ (ผู้ใช้ที่ใช้สภาพแวดล้อมเดสก์ท็อปของระบบปฏิบัติการของคุณ) จากนั้นผู้ใช้จะมีกระบวนการที่อ่านและส่งต่อแต่ละบรรทัดเป็นข้อความใหม่ไปยังสภาพแวดล้อมเดสก์ท็อปที่ใช้งาน
ในการตั้งค่าการแจ้งเตือนบนเดสก์ท็อป:
$ mkfifo /home/user/.cache/notification-queue/etc/restic/default.sh , set: RESTIC_BACKUP_NOTIFICATION_FILE=/home/user/.cache/notification-queueเราต้องการทราบเมื่อการสำรองข้อมูลอัตโนมัติล้มเหลวดังนั้นเราจึงสามารถแก้ไขได้ เนื่องจากแล็ปท็อปของฉันไม่เรียกใช้เซิร์ฟเวอร์เมลฉันจึงไปหาทางออกเพื่อตั้งค่าแล็ปท็อปของฉันเพื่อให้สามารถส่งอีเมลด้วย postfix ผ่าน Gmail ของฉัน ทำตามคำแนะนำที่นั่น
ใส่ไฟล์นี้ใน /bin :
systemd-email : ส่งอีเมลโดยใช้ SendMail (1) สคริปต์นี้ยังมีการหมดเวลาสำหรับการไม่ส่งสแปมเซิร์ฟเวอร์ Gmail และทำให้บัญชีของฉันถูกบล็อก ใส่ไฟล์นี้ใน /etc/systemd/system/ :
[email protected] : บริการที่สามารถแจ้งให้คุณทราบทางอีเมลเมื่อบริการ SystemD ล้มเหลว แก้ไขที่อยู่อีเมลเป้าหมายในไฟล์นี้และแทนที่หรือลบ {{ INSTALL_PREFIX }} ตามการติดตั้งของคุณ ตอนนี้แก้ไข /usr/lib/systemd/system/[email protected] และ /usr/lib/systemd/system/[email protected] เพื่อเรียกความล้มเหลวของบริการนี้
OnFailure=status-email-user@%n.service
ใช้ bin/cron_mail : wrapper สำหรับเรียกใช้งาน cron ที่ส่งเอาต์พุตของงานเป็นอีเมลโดยใช้คำสั่ง Mail (1) นี่ถือว่าโปรแกรม mail ได้รับการตั้งค่าอย่างถูกต้องบนระบบเพื่อส่งอีเมล
หากต้องการใช้สิ่งนี้ให้ห่อคำสั่ง restic script ด้วยในไฟล์ cron ของคุณเช่น:
- @midnight root . /etc/restic/default.sh && restic_backup.sh
+ @midnight root . /etc/restic/default.sh && cron_mail restic_backup.shสำหรับแล็ปท็อปมันอาจทำให้รู้สึกว่าไม่ต้องสำรองข้อมูลหนักเมื่อคุณเชื่อมต่อแบบมิเตอร์เช่นการเชื่อมต่อที่ใช้ร่วมกันจากโทรศัพท์มือถือของคุณ ในการแก้ปัญหานี้เราสามารถตั้งค่าบริการ SystemD ที่อยู่ในสถานะความสำเร็จเฉพาะเมื่อการเชื่อมต่อไม่มีการวัด จากนั้นเราสามารถบอกบริการสำรองของเราเพื่อขึ้นอยู่กับบริการนี้ได้อย่างง่ายดาย! เมื่อบริการที่ไม่มีมิติตรวจพบการเชื่อมต่อที่ไม่มีการตรวจสอบมันจะไปสู่สถานะที่ล้มเหลว จากนั้นบริการสำรองของเราจะไม่ทำงานเนื่องจากต้องใช้บริการอื่น ๆ นี้เพื่อให้ประสบความสำเร็จ
[email protected] และ [email protected] เพื่อให้บริการใหม่อยู่ในสถานะความสำเร็จ: Requires=nm-unmetered-connection.service
After=nm-unmetered-connection.service
/etc/systemd/system/ :nm-unmetered-connection.service : บริการที่อยู่ในสถานะความสำเร็จเฉพาะในกรณีที่การเชื่อมต่อไม่มีการวัด/bin :nm-unmetered-connection.sh : ตรวจจับการเชื่อมต่อแบบมิเตอร์และส่งคืนรหัสข้อผิดพลาดหากตรวจพบ สคริปต์นี้ต้องการการติดตั้งเครือข่าย GNOME (แก้ไขสคริปต์นี้หากระบบของคุณมีตัวจัดการเครือข่ายที่แตกต่างกัน)# systemctl daemon-reload ☝ เคล็ดลับ : ทุกขั้นตอน แต่ขั้นตอนแรกสามารถทำได้ในครั้งเดียวถ้าคุณใช้ MakeFile ตั้งค่า $PREFIX ตามต้องการหรือว่างเปล่าสำหรับการติดตั้งเป็น /
sudo bash -c ' export PREFIX=
make build/usr/lib/systemd/system/nm-unmetered-connection.service
install -m 0644 build/usr/lib/systemd/system/nm-unmetered-connection.service $PREFIX/etc/systemd/system
install -m 0555 bin/nm-unmetered-connection.sh /bin
systemctl daemon-reload
' เพื่อความสะดวกมีสคริปต์ wrapper restic ที่ทำให้การโหลดโปรไฟล์และ เรียกใช้ restic ตรงไปตรงมา (จำเป็นต้องทำงานกับ sudo เพื่ออ่านสภาพแวดล้อม) แค่วิ่ง:
sudo resticw WHATEVER (เช่น sudo resticw snapshots ) เพื่อใช้โปรไฟล์เริ่มต้นresticw -p anotherprofile snapshotsrestic เช่น-ตัวเลือก --diff-latestคำสั่งที่มีประโยชน์:
| สั่งการ | คำอธิบาย |
|---|---|
resticw snapshots | แสดงรายการสแน็ปช็อตสำรอง |
resticw diff <snapshotId-1> <snapshotId-2> | แสดงการเปลี่ยนแปลงระหว่างสแน็ปช็อตสำรองข้อมูล |
resticw stats / resticw stats snapshotId ... | แสดงสถิติสำหรับ repo ทั้งหมดหรือสแน็ปช็อตที่ระบุ |
resticw mount /mnt/restic | ติดตั้งที่เก็บระยะไกลของคุณ |
resticw --diff-latest | แสดงการเปลี่ยนแปลงสแน็ปช็อตล่าสุด: รัน restic diff หลังจากค้นหา 2 สแน็ปช็อตล่าสุด |
มีเป้าหมายที่จะลบไฟล์ทั้งหมด (สคริปต์และ การกำหนดค่า) ที่ติดตั้งโดย sudo make install-* แค่วิ่ง:
$ sudo make uninstall วิธีที่ดีที่สุดในการดีบักสิ่งที่เกิดขึ้นคือเรียกใช้สคริปต์ restic_backup.sh ด้วยฟังก์ชั่นการติดตามของ Bash คุณสามารถเปิดใช้งานได้โดยเรียกใช้สคริปต์ด้วย bash -x :
$ source /etc/restic/default.env.sh
$ bash -x /bin/restic_backup.sh
ในการดีบักส่วนเล็ก ๆ ของสคริปต์สำรองให้ใส่บรรทัดเหล่านี้ที่ด้านบนและด้านล่างของส่วนรหัสที่เกี่ยวข้องเช่น:
set -x
exec 2> /tmp/restic-automatic-backup-scheduler.log
< code to debug >
set +xจากนั้นตรวจสอบผลลัพธ์เช่น
$ less /tmp/restic-automatic-backup-scheduler.log
$ tail -f /tmp/restic-automatic-backup-scheduler.log # or follow output like this.Makefile เพียงติดตั้งเป็น $PREFIX $ PREFIX=/tmp/restic-test make install-systemdresticw : หากคุณเคยอัปเดต DOC การใช้งานคุณจะต้องรีเฟรชตัวแยกวิเคราะห์ที่สร้างโดยอัตโนมัติ: $ pip install doctopt.sh
$ doctopt.sh usr/local/bin/resticwเพื่อสร้างรุ่นใหม่:
$ vi CHANGELOG.md && git commit -am " Update CHANGELOG.md "
$ git tag vX.Y.Z
$ git push && git push --tags