2013-02-13 157 views
1

我正在努力獲取存儲在Amazon S3上的MongoDB每日備份。這是我第一次使用crontab和shell腳本,並且遇到了一些問題。我發現了一個腳本,似乎工作,但只有當我手動運行它。這是我的。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這個劇本是我得到:

[email protected]:/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腳本。我理解這裏正在發生的大部分事情,但我仍然試圖把握整體想法。

+0

你能與SH -x ./mongobackup.sh運行 - 輸出可能有助於看看出了什麼問題。 – 2013-02-13 03:52:59

+0

使用sh -x添加了原始文章的更新。對我仍然沒有任何意義。 – 2013-02-13 04:01:48

+0

它也沒有手動工作,這就是爲什麼當你將它添加到crontab時它不起作用的原因。你需要一個轉儲文件夾和一個主機參數在調用中,嘗試使用它們併發布輸出 – Sammaye 2013-02-13 08:09:06

回答

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