Bash

在 Linux 中以正確的方式從 bash 腳本執行自動備份

  • May 3, 2014

我有一個 bash 腳本,用於備份 Moodle 安裝。它工作正常,我已經測試了備份,但是它有問題;當我做備份時,因為我sudo每次都必須輸入密碼,我必須親自輸入密碼,而不是僅僅執行一個cron作業來自動完成。

現在我懷疑這與我不知道的事情cron或使用 SSH 密鑰有關;無論哪種方式,我都想自動化備份。

#!/bin/bash

# Turn on Maintance mode and log it...
logger "BEGIN Turning on maintance mode in moodle"
lynx -cmd_script=./backupScripts/turnOnMaintMode http://moodle.leeand00domain.local
logger "END Turning on maintance mode complete."

logger "BEGIN Creating Backup Directory"
export bkdir=$(date +"%Y-%m-%d")
mkdir $bkdir 
cd $bkdir
logger "END Creating Backup Directory"

#Get a backup copy of the database
logger "BEGIN Backing up the Moodle Database"
mysqldump -u moodleuser --password=XXXXX -C -Q -e --create-options moodle > moodle-database.sql
logger "END Backing up the Moodle Database"

#Get a backup copy of moodle data 
logger "BEGIN Backing up moodledata"
tar -cvzf moodledata.tar.gz --exclude='/var/moodledata/cache' --exclude='/var/moodledata/lang' --exclude='/var/moodledata/sessions' --exclude='/var/moodledata/temp' /var/moodledata  && tar -cvzf moodleinstallation.tar.gz /var/www
logger "END Backing up moodledata"

cd ..

tar -cvzf  $bkdir.tar.gz  $bkdir

# Turn off Maintance mode and log it...
logger "BEGIN Turning off maintance mode in moodle"
lynx -cmd_script=./backupScripts/turnOffMaintMode http://moodle.leeand00domain.local
logger "END Turning off maintance mode in moodle complete."

我會做以下事情之一。

方法 #1 - 系統定時任務

將備份腳本添加到系統的 crons 而不是實際使用者的 crontab 條目。大多數係統都維護這樣的目錄結構/etc

$ ls -1d /etc/cron.*
/etc/cron.d
/etc/cron.daily
/etc/cron.deny
/etc/cron.hourly
/etc/cron.monthly
/etc/cron.weekly

您可以簡單地將要以任何頻率執行的腳本放在適當的目錄中。

方法 #2 - 無密碼 sudo

/etc/sudoers另一種方法是使用命令在文件中設置一個條目visudo來編輯它。此條目將授予對該特定腳本的使用者 crontab 條目的無密碼訪問權限。您在他們的 crontab 中的條目將是這樣的:

$ sudo ...your script...

您文件中的條目/etc/sudoers將是這樣的:

user ALL=(root) NOPASSWD: /home/user/cronscript.sh

參考

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