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