2011-08-26 99 views
0

你好,我有這樣一個腳本:bash腳本手動執行與crontab中正常,但無法運行

#!/usr/bin/bash 


ARSIP=/apps/bea/scripts/arsip 
CURDIR=/apps/bea/scripts 
OUTDIR=/apps/bea/scripts/out 
DIRLOG=/apps/bea/jboss-6.0.0/server/default/log 
LISTFILE=$CURDIR/tmp/file.$$ 
DATE=`perl -e 'use POSIX; print strftime "%Y-%m-%d", localtime time-86400;'` 

JAVACMD=/apps/bea/jdk1.6.0_26/bin/sparcv9/java 

HR=00 

for ((c=0; c<24; c++)) 
do 
    echo $DATE $HR 
    $JAVACMD -jar LatencyCounter.jar LatencyCounter.xml $DATE $HR 
    sleep 1 
    cd $OUTDIR 
     mv btw_120-180.txt btw_120-180-$DATE-$HR.txt 
     mv btw_180-360.txt btw_180-360-$DATE-$HR.txt 
     mv btw_60-120.txt btw_60-120-$DATE-$HR.txt 
     mv failed_to_deliver.txt failed_to_deliver-$DATE-$HR.txt 
     mv gt_360.txt gt_360-$DATE-$HR.txt 
     mv out.log out-$DATE-$HR.log 
    cd - 
    let HR=10#$HR+1 
     HR=$(printf %02d $HR); 
done 

cd $OUTDIR 

tar -cf latency-$DATE.tar btw*-$DATE-*.txt gt*$DATE*.txt out-$DATE-*.log 
sleep 300 
gzip latency-$DATE.tar 
sleep 300 
/apps/bea/scripts/summaryLatency.sh 
sleep 300 
rm -f btw* failed* gt* out* 

#mv latency-$DATE.tar.gz ../$ARSIP 
cd - 

它基本上執行在同一個目錄下的jar文件,這個腳本,然後焦油結果,GZIP,並執行另一個bash文件然後刪除所有以前收集的文件。問題是我需要這個腳本每天運行,我使用crontab來做到這一點。它仍然返回空的tar文件,但如果我手動執行它效果很好..我也有其他4個腳本運行在crontab中,他們工作良好..我仍然不知道這種現象的主要原因是什麼

謝謝

+0

將cron stderr輸出重定向到日誌文件並查看其中包含的內容。也許perl不在路徑中。你有輸出嗎? – joemooney

+0

另外4個腳本也有一個perl的東西,它的工作原理..對於輸出,通常它應該生成2個文件(一個gzip文件通常是6到12 MB和1 KB文件),但是用crontab它給了我一個52 KB gzip文件和一個空文件。 – Lynx777

+0

「我的腳本是從命令行運行的,但不是從cron運行的」,它幾乎和Unix本身一樣古老。你試過Google嗎? – tripleee

回答

0

我猜,當你執行$JAVACMD -jar LatencyCounter.jar LatencyCounter.xml $DATE $HR,您在包含LatencyCounter.jar目錄不是。在輸入for循環之前,您可能需要輸入cd $CURDIR

+0

我修改了腳本,並且從零開始重新編寫了腳本,它看起來像是這個問題,儘管我遲到了這個問題,但是我感謝你的建議:D – Lynx777

3

我會採取刺:你的腳本是由/ bin/sh而不是/ bin/bash運行的。

儘量明確地在cron項使用bash運行它,就像這樣:

* * * * * /bin/bash /your/script 
+0

我修改了腳本,再次從零寫入,看起來問題就像@glenn說的,雖然我遲到了,結束這個問題但我感謝你的建議:D – Lynx777

+0

不知道爲什麼這對我有幫助。反正我有'#!/ bin/bash'。 – adrin

+0

我有同樣的問題'#!/bin/bash'也沒有幫助 – Samuel

相關問題