Cronjob 通过 git 推送 MongoDB 备份

Cronjob 通过 git 推送 MongoDB 备份

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

所以我创建了一个计划任务以 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

"$BAK"在发出 git 命令之前,您需要更改目录。

您明确地将备份写入,$BAK$但当您运行 时,gid add .您将位于运行 cron 作业的用户的主目录中。在本例中,该目录为/root


这是一个测试脚本

pwd >/tmp/atest.out
touch ./atest.file

当从 root 的 crontab 运行时

* * * * * /home/iain/atest

/tmp/atest.out 的内容

/根

那么 ./atest.file 在哪里

ls -l /home/iain/atest.file
ls: cannot access /home/iain/atest.file: No such file or directory

ls -l /root/atest.file
-rw-r--r--. 1 root root 0 Nov 16 13:24 /root/atest.file

答对了!。从 git 的主目录运行脚本并不重要。在这种情况下,工作目录是 /root。

/usr/bin/git add .

正在添加当前工作目录,除非您更改了它/root

相关内容