Cronjob通过git推MongoDB备份

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

所以我通过crontab -e命令创build了一个作为root用户的cronjob

 #!/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" 

结果 :备份正在创build,但没有推到回购。 手动执行脚本按需要推送备份。 日志只包括脚本中的所有回应。

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

你明确地写你的备份到$BAK$但是当你运行gid add . 您将位于正在运行cron作业的用户的主目录中。 在这种情况下,这将是/root


这是一个testing脚本

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

当从根的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