Shell-Script

關閉前將工作目錄備份到 git

  • September 4, 2019

我正在使用 Ubuntu 16.04。我有一個名為 Work 的目錄,每次關閉電腦時我都想將其備份到 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"

謝謝大家的幫助,但我已經設法解決了這個問題。我所做的是編輯/usr/share/applications 中的shutdown.desktop並將 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。我稍後會嘗試。

您可以按照此處的說明在關機時執行腳本。

基本上,您可以將腳本放在 中/etc/rc6.d/,並使其可執行。這種方法的一個缺點是上述目錄中的任何腳本都將以 root 使用者身份執行,這可能會更改文件權限並在以後引起問題。另一種方法是將腳本保留在主目錄中,然後將以下腳本添加到/etc/rc6.d

#!/bin/sh

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

最後,您還應該刪除對的呼叫read(或添加超時),因為它會在關閉之前要求您按下按鍵並阻止關閉。

系統化方法

上面的 rc6.d 腳本方法是在關機時執行腳本的傳統 sysv-init 方法。對於較新版本的 Debian/Ubuntu,使用 systemd 單元文件在關機時執行腳本會更安全。

將以下腳本放入/etc/systemd/system/backup-work.servicesource)並執行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

引用自:https://unix.stackexchange.com/questions/538890