lee*_*d00 3 bash ssh cron backup
我写了一个 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."
Run Code Online (Sandbox Code Playgroud)
我会做以下事情之一。
将备份脚本添加到系统的 cron 中,而不是添加到实际用户的 crontab 条目中。大多数系统维护如下目录结构/etc:
$ ls -1d /etc/cron.*
/etc/cron.d
/etc/cron.daily
/etc/cron.deny
/etc/cron.hourly
/etc/cron.monthly
/etc/cron.weekly
Run Code Online (Sandbox Code Playgroud)
您可以简单地将要以任何频率运行的脚本放在适当的目录中。
另一种方法是/etc/sudoers使用visudo编辑命令在文件中设置一个条目。此条目将授予对该特定脚本的用户 crontab 条目的无密码访问权限。您在他们的 crontab 中的条目将是这样的:
$ sudo ...your script...
Run Code Online (Sandbox Code Playgroud)
您的/etc/sudoers文件中的条目将是这样的:
user ALL=(root) NOPASSWD: /home/user/cronscript.sh
Run Code Online (Sandbox Code Playgroud)