Cronjob 通过 git 推送 MongoDB 备份

Cronjob 通过 git 推送 MongoDB 备份

任务:
创建一个每晚执行一次 bash 脚本的 Cronjob。 bash 脚本应该执行 mongoDB 备份并将其推送到 Git Repo。

所以我cronjob通过命令创建了一个 root 用户crontab -e

#!/bin/bash
SHELL=/bin/bash
USER=root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/root
HOME=/root

0 2 * * * /path/script.sh > /path/script.log

这是应该执行的脚本:

BAK="/path"
#MONGO="/usr/bin/mongo"
#MONGODUMP="/usr/bin/mongodump"
#GIT="/usr/bin/git"

echo "starting backup"
echo $BAK
/usr/bin/mongodump --username=myusername --password=mypassword --db=mydatabase --out=$BAK$
echo "backup created"
/usr/bin/git add .
/usr/bin/git commit -m "backup from `date +'%Y_%m_%d'`"
echo "committed"
/usr/bin/git push -u origin master
echo "pushed backup. done"

结果:
正在创建备份,但未将其推送到存储库。手动执行脚本会根据需要推送备份。日志仅包含脚本中的所有回显。

答案1

发出命令时您是否位于正确的目录中git?换句话说,当git add .执行命令时,它是否知道任何存储库?

尝试使用以下命令从脚本cd进入目录:BAK

cd "$BAK"

除此之外,尝试通过附加2>&1到 cronjob 行来捕获错误输出。

$BAK$我注意到的另一件事是at参数的使用--out=。对我来说有点像%VAR%在 Windows 上...您确定要输出到$BAK$还是您的意思$BAK

最后,您确定要在凌晨 2 点到 3 点之间每分钟运行此脚本吗?

相关内容