Bash
在 Linux 中以正確的方式從 bash 腳本執行自動備份
我有一個 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
參考