
住宅の種類:
>echo $SHELL
/bin/ksh
予約されたもの:
15 * * * * /bin/ksh /wls_domains/resMGT/logs/bea/wlr3queuetransaction.sh > /wls_domains/resMGT/logs/bea/data/script.log
スクリプトは次のとおりです。
##log files and lookup file "wlr3queue.txt" are in the same path of the script ##/wls_domains/resMGT/logs/bea/wlr3queuetransaction.sh
Script :
#!/bin/ksh
dt=`date +%Y-%m-%d`
xy=`date|awk '{print $4}'|awk -F":" '{print $1}'`
yz=`expr $xy - 1`
if [ $yz -le 9 ]
then
yz=0$yz
fi
if [ $xy -gt 0 ]
then
for i in `cat wlr3queue.txt`
do
sum=0
count=`gzgrep -i "$dt" admin_resMGT_access.log* | grep "$yz:[0-5][0-9]" | grep "$i" | wc -l`
if [ $count -gt 0 ]
then
name=`echo $i | cut -d'/' -f3`
gzgrep -i "$dt" admin_resMGT_access.log* | grep "$yz:[0-5][0-9]" | grep "$i" | awk '{print $8}' > consumed_time.txt
for j in `cat consumed_time.txt`
do
j_ms=`echo "$j * 1000" | bc`
echo $j_ms >> consumed_ms_time.txt
done
for k in `cat consumed_ms_time.txt`
do
sum=`echo "$sum + $k" | bc`
done
avg=`echo "scale=2; ($sum/$count) "| bc`
min=`cat consumed_ms_time.txt | sort -n | head -1`
max=`cat consumed_ms_time.txt | sort -n | tail -1`
else
avg=0
min=0
max=0
fi
(
echo $yz","$count","$avg","$min","$max
)>>/wls_domains/resMGT/logs/bea/data/$name$dt.csv
rm -f consumed_ms_time.txt
done
else
echo "script won't execute at this hour" > temp.txt
fi
次のコマンドを実行し、スクリプトが正常に実行されました。
./wlr3queuetransaction.sh
sh -x wlr3queuetransaction.sh
/bin/ksh /wls_domains/resMGT/logs/bea/wlr3queuetransaction.sh
/bin/ksh/ wlr3queuetransaction.sh.
デバッグするには?何をすべきか?
答え1
crontabのプロジェクトは限られた環境で実行されます。スクリプトの上部にPATHを指定できます。例えば、
PATH=$PATH:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
あるいは、絶対パスを使用して各実行可能ファイルを呼び出すこともできます。
答え2
あなたのスクリプトcat wlr3queue.txt
など...これらのファイルはどこにありますか?手動で試してみると実行中ですが、./wlr3queuetransaction.sh
cronはフルパス名で呼び出されます。 Cron は crontab 所有者のホームディレクトリからコマンドを実行します。おそらく、スクリプトからアクセスするファイルはそのホームディレクトリにはないでしょう。
いつもスクリプトが呼び出されるすべてのディレクトリで実行できることを確認します。つまり、常にファイル/ディレクトリのフルパス名を使用するか、cd
正しいディレクトリに最初に移動します。
おそらく、スクリプトからのエラー出力を含む電子メールを受け取った可能性があります。これは問題が何であるかについての手がかりを提供します。
答え3
まず、デバッグ目的でstderrをいくつかのファイルにリダイレクトします。そうすれば、何が間違っているのかがわかります。
15 * * * * /bin/ksh /wls_domains/resMGT/logs/bea/wlr3queuetransaction.sh 2>LOG_FILE > /wls_domains/resMGT/logs/bea/data/script.log
次に、ファイルの場所の問題ではない場合は非常に似ているので、次の質問を見てください。 crontab PATH変数を設定する方法。
答え4
crontab
あなたの()権限を確認してください/var/spool/cron/crontabs/$USER
。600
所有者と一緒にいる必要がありますroot:crontab
。それ以外の場合は動作しません。もちろん、crontabの構文(および行末)、スクリプトのパス、および権限を確認してください。