Crontab没有运行我的shell脚本,但是它是手动运行的(带有错误)

时间:2013-02-13 02:36:32

标签: linux mongodb crontab

我正在努力获取存储在Amazon S3上的MongoDB每日备份。这是我第一次使用crontab和shell脚本,我遇到了麻烦。我找到了一个似乎有用的脚本,但只有当我手动运行它时。这就是我所拥有的。

在crontab中(以root用户身份登录)。

* 2 * * * /mongo_backups/daily_script/mongobackup.sh

在我的脚本(mongobackup.sh)中。

#!/bin/sh

MONGODUMP_PATH="/usr/bin/mongodump"
MONGO_HOST="Aspire"
TIMESTAMP=`date +%F`
S3_BUCKET_PATH="Aspire_Backups"

# Create backup
$MONGODUMP_PATH --host $HOST

# Add timestamp to backup
mv dump mongodb-$HOSTNAME-$TIMESTAMP
tar cf mongodb-$HOSTNAME-$TIMESTAMP.tar mongodb-$HOSTNAME-$TIMESTAMP

# Upload to S3
s3cmd put mongodb-$HOSTNAME-$TIMESTAMP.tar s3://$S3_BUCKET_PATH/aspire-mongodb-  $HOSTNAME-$TIMESTAMP.tar

如果我使用sh -x ./mongobackup.sh手动运行脚本,这就是我得到的:

root@ip-10-4-149-188:/mongo_backups/daily_script# sh -x ./mongobackup.sh
+ MONGODUMP_PATH=/usr/bin/mongodump
+ MONGO_HOST=Aspire
+ date +%F
+ TIMESTAMP=2013-02-13
+ S3_BUCKET_PATH=Aspire_Backups
+ /usr/bin/mongodump --host
ERROR: required parameter is missing in 'host'

+ mv dump mongodb--2013-02-13
mv: cannot stat `dump': No such file or directory
+ tar cf mongodb--2013-02-13.tar mongodb--2013-02-13
tar: mongodb--2013-02-13: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors
+ s3cmd put mongodb--2013-02-13.tar s3://Aspire_Backups/aspire-mongodb--2013-02-                                                                                                                        13.tar
mongodb--2013-02-13.tar -> s3://Aspire_Backups/aspire-mongodb--2013-02-13.tar  [                                                                                                                       1 of 1]
10240 of 10240   100% in    0s    42.59 kB/s  done

就像我说的,我是crontab以及shell脚本的新手。我理解这里发生的大部分内容,但我仍然试图掌握整体思路。

1 个答案:

答案 0 :(得分:2)

在脚本中你有:

$MONGODUMP_PATH --host $HOST

# Add timestamp to backup
mv dump mongodb-$HOSTNAME-$TIMESTAMP
tar cf mongodb-$HOSTNAME-$TIMESTAMP.tar mongodb-$HOSTNAME-$TIMESTAMP

意味着您使用的是先前尚未声明的变量$HOST$HOSTNAME$TIMESTAMP

尝试将它们声明为

HOST=$(hostname)
HOSTNAME=$(hostname)
TIMESTAMP=$(date "+%Y%m%d") # it will output 20130213