สำรองข้อมูลงานไปยังคอมไพล์ก่อนปิดเครื่อง


0

ฉันใช้ Ubuntu 16.04 ฉันมีไดเรกทอรีชื่องานที่ฉันต้องการสำรองข้อมูลไปยัง GitHub ทุกครั้งที่ฉันเปิดเครื่องคอมพิวเตอร์ ฉันได้เขียนสคริปต์สำรองและมันทำงานได้ดี แต่ฉันไม่สามารถเรียกใช้ได้ก่อนที่จะปิดเครื่อง กรุณาช่วย. นี่คือเนื้อหาของ backup_work.sh

cd /home/kaustab/Work
git add .
git commit -m "Daily Backup"
mkdir /home/kaustab/test 
git push origin master
echo "Backed up"
read -n 1 -s -r -p "Press any key to continue"

เอกสาร GitHub สำหรับการเชื่อมต่อผ่าน ssh (แทนที่จะเป็น https): help.github.com/en/articles/connecting-to-github-with-ssh
Wildcard

คำตอบ:


2

คุณสามารถเรียกใช้สคริปต์ที่ปิดตามคำแนะนำที่นี่

โดยพื้นฐานแล้วคุณสามารถวางสคริปต์ไว้/etc/rc6.d/และทำให้สามารถเรียกใช้งานได้ ข้อเสียเปรียบอย่างหนึ่งของวิธีนี้คือสคริปต์ใด ๆ ในไดเรกทอรีด้านบนจะทำงานในฐานะผู้ใช้รูทซึ่งสามารถเปลี่ยนการอนุญาตของไฟล์และทำให้เกิดปัญหาได้ในภายหลัง อีกทางเลือกหนึ่งคือการปล่อยให้สคริปต์ของคุณในไดเรกทอรีบ้านของคุณและเพิ่มสคริปต์ต่อไปนี้ใน/etc/rc6.d

#!/bin/sh

sudo -u kaustab /home/kaustab/backup_work.sh
exit 0

ในที่สุดคุณควรลบการโทรไปreadเช่นกัน (หรือเพิ่มการหมดเวลา) เนื่องจากมันจะขอให้คุณกดปุ่มก่อนที่จะปิดและปิดกั้นการปิด

วิธีการของ Systemd

วิธีการสคริปต์ rc6.d ด้านบนเป็นวิธี sysv-init ดั้งเดิมสำหรับการเรียกใช้สคริปต์เมื่อปิดระบบ ด้วย Debian / Ubuntu รุ่นใหม่กว่าจะปลอดภัยกว่าหากใช้ไฟล์ systemd unit เพื่อเรียกใช้สคริปต์เมื่อปิดระบบ

วางสคริปต์ต่อไปนี้ใน/etc/systemd/system/backup-work.service( ซอร์ส ) และรันsudo systemctl daemon-reload

[Unit]
Description=Backup work directory
DefaultDependencies=no
Before=shutdown.target reboot.target halt.target
# This works because it is installed in the target and will be
#   executed before the target state is entered
# Also consider kexec.target

[Service]
Type=oneshot
User=kaustab
Group=kaustab
ExecStart=/home/kaustab/backup_work.sh  # your path and filename

[Install]
WantedBy=halt.target reboot.target shutdown.target

ฉันลองใช้วิธี systemd แต่มันไม่ทำงาน สคริปต์ของฉันมีสิทธิ์ดำเนินการ นอกจากนี้เมื่อสคริปต์จะทำงานฉันจะถูกถามชื่อผู้ใช้และรหัสผ่านของฉัน
KaustabPal

สิ่งที่ฉันต้องการคือการเรียกใช้สคริปต์ของฉันก่อนและถ้าสคริปต์ทำงานได้สำเร็จเท่านั้นระบบจะปิด มีวิธีการทำเช่นนี้หรือไม่?
KaustabPal

1
หากคุณใช้ HTTPS เพื่อเชื่อมต่อกับ Github ใช่แล้วมันจะขอรหัสผ่าน คุณควรใช้ SSH ที่ไม่มีรหัสผ่านเพื่อเชื่อมต่อกับ Github บริการที่เกิดจาก systemd จะไม่มีสิทธิ์เข้าถึงเทอร์มินัลดังนั้นคุณจะไม่เห็นคำขอชื่อผู้ใช้ / รหัสผ่าน
QIS

สำหรับการบล็อกการปิดระบบคุณสามารถพิจารณาใช้บริการเช่นreboot-guard
QIS

ไม่จำเป็นต้องเปิดใช้งานสคริปต์หลังจากdaemon-reloadหรือไม่
Jan Dorniak

0

ขอบคุณทุกคนสำหรับความช่วยเหลือของคุณ แต่ฉันได้พยายามที่จะแก้ปัญหานี้ สิ่งที่ฉันทำคือแก้ไขshutdown.desktopใน / usr / share / applications และเปลี่ยน exec เป็นสคริปต์ของฉัน นี่คือลักษณะของไฟล์shutdown.desktop ที่แก้ไขแล้วของฉัน

[Desktop Entry]
Name=Shutdown
Comment=Backup and power off the computer
GenericName=Shut Down
Exec=gnome-terminal -e /home/kaustab/.scripts/backup_work.sh
Terminal=false
Type=Application
Categories=Utility
Icon=/usr/share/unity/icons/shutdown_highlight.png
NotShowIn=GNOME-Flashback;
X-AppStream-Ignore=true
X-Ubuntu-Gettext-Domain=session-shortcuts

ในตอนท้ายของสคริปต์backup_work.shฉันได้เพิ่มบรรทัดgnome-session-quit --power-offเพื่อให้ตัวเลือกของเมนูพลังงาน ขอบคุณQISสำหรับการชี้ให้ใช้ ssh แทน https เพื่อเชื่อมต่อกับ github ฉันจะลองดูทีหลัง

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