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

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)

slm*_*slm 5

我会做以下事情之一。

方法 #1 - 系统 crons

将备份脚本添加到系统的 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)

您可以简单地将要以任何频率运行的脚本放在适当的目录中。

方法#2 - 少密码 sudo

另一种方法是/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)

参考