以正确的方式从 Linux 中的 bash 脚本自动运行备份

以正确的方式从 Linux 中的 bash 脚本自动运行备份

我有一个为备份 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)

相关内容