2012-10-12 31 views
0

我有這樣的代碼:調試我的cron應用

set -e 
set -x 
folderName=$(echo `date +%Y/%m/%d/`); 
fileName=x.x.x.x.x.x.x.log 
cp x.x.x.x.x.x/$1 $fileName 
gzip $fileName 
s3cmd put $fileName.gz s3://x.x.x.x.x/$folderName  
rm $fileName.gz 

這是工作的罰款,如果我像這樣運行:

./shell logfilelocation 

當我加入到crontab中是這樣的:

* * * * * /home/x.x.x/testing/s3 -f x.x.x.log >> /tmp/mys3Log 

我等!文件mys3Log被創建。但它沒有內容!我期望命令執行的結果(因爲我在我的代碼中使用set -e ; set -x)應該進入mys3Log文件,因爲我在那裏做重定向。

但是出了問題。我對bash編程和cron很陌生。

我在哪裏犯錯?

在此先感謝。

回答

1

cron不具有相同的環境下,如在交互的shell,所以在腳本的開始,家當後,添加:

source ~/.bashrc || source /etc/profile 

,並刪除set -e,看看發生了什麼事情。

在你crontab,記錄錯誤&輸出(STDERRSTDOUT),你需要做的:

* * * * * /home/x.x.x/testing/s3 -f x.x.x.log >> /tmp/mys3Log 2>&1 

此外,在腳本的第4行,您使用的是可變$name多數民衆贊成從未聲明。

最後但並非最不重要的,像Janauary說,加在第一行的#!/bin/bash設崗,並確保你的腳本具有可執行權限。 :chmod +x script.sh

+0

行'源的〜/ .bashrc ||源/ etc/profile'應該添加到cron文件中? – sriram

+0

感謝您的回答,您沒有回答我的評論問題。 – sriram

+0

我在我的cron日誌文件中收到錯誤信息:'s3cmd:command not found'。 – sriram

0

如前面的答覆中提到,cron的工作在不同的環境比你的shell。這意味着環境變量在shell中會有所不同。對於如:

在外殼:

$ echo $PATH 
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/aws/bin 

而如果運行在cron以下中:

* * * * * echo $PATH > path.out 

你會得到/usr/bin:/bin

找出是使用命令which s3cmd您s3cmd可執行文件,然後修改相應的cron。例如:

$ which s3cmd 
/usr/local/bin/s3cmd 

然後,cron的應該是這樣的:

PATH=/usr/bin:/bin:/usr/local/bin 
* * * * * echo $PATH > path.out