任务:创建一个 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
。