我有一个为备份 Moodle 安装而编写的 bash 脚本。它工作正常,我已经测试了备份,但有一个问题;当我进行备份时,由于每次都必须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
我会做以下其中一项事情。
方法#1 - 系统 crons
将备份脚本添加到系统的 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
参考
答案2
我建议使用 root 进入 crontab,
sudo crontab -e
当您将其作为脚本中的第一个命令包含时,所有命令都将作为 root crontab 执行。
如果您需要更多信息,请查看这页。
通常以管理权限运行的命令(即通常使用 sudo 运行)应添加到 root 用户的 crontab(而不是用户的 crontab)