1

Glassfish サーバーが実行されている (freebsd システムにインストールされている) かどうかを確認するスクリプトを作成しました。実行されていない場合、スクリプトは Java プロセスを強制終了してハングしていないことを確認し、asadmin startを発行します。 -domainコマンド

このスクリプトをコマンド ラインから実行すると、100% の確率で成功します。cron タブから実行すると、 asadmin start-domain行を除くすべての行が実行されます。実行されていないように見えるか、少なくとも完了していません。つまり、このスクリプトの実行後にサーバーが実行されていません。

Glassfish や、サーバーの起動に使用される asadmin ユーティリティに慣れていない人のために説明すると、フォークされたプロセスが使用されていることを理解しています。これはcron経由で問題を引き起こしている可能性がありますか?

繰り返しますが、今日のすべてのテストで、スクリプトはコマンド ラインから実行すると最後まで実行されます。cronを介して実行されると、完了しません...これをcrontabから実行すると何が違うのでしょうか???

助けてくれてありがとう...私はこの仕事をしようとして髪を引っ張っています!

#!/bin/bash

JAVA_HOME=/usr/local/diablo-jdk1.6.0/; export JAVA_HOME

timevar=`date +%d-%m-%Y_%H.%M.%S` 
process_name='java'
get_contents=`cat urls.txt`  

for i in $get_contents
do
echo checking $i
statuscode=$(curl --connect-timeout 10  --write-out %{http_code} --silent --output /dev/null $i)
case $statuscode in
    200)
        echo "$timevar $i $statuscode okay" >> /usr/home/user1/logfile.txt
        ;;
    *)
        echo "$timevar $i $statuscode bad" >> /usr/home/user1/logfile.txt
        echo "Status $statuscode found" | mail -s "Check of $i failed" some.address@gmail.com
        process_id=`ps acx | grep -i $process_name | awk {'print $1'}`
        if [ -z "$process_id" ]
        then
            echo "java wasn't found in the process list"
        else
            echo "Killing java, currently process $process_id"
            kill -9 $process_id
        fi
        /usr/home/user1/glassfish3/bin/asadmin start-domain domain1
        ;;
esac
done

また、完全を期すために、cron タブのエントリを次に示します。

*/2 * * * *  /usr/home/user1/server.check.sh >> /usr/home/user1/cron.log
4

1 に答える 1

0

わかりました...別のサイトでこれに対する答えを見つけましたが、今後の参考のためにここに答えを追加すると思いました。

問題はPATHでした!! java_home が設定されていても、java 自体は cron デーモンのパスにありませんでした。

cron で使用できるパスを確認するための簡単なテストとして、次の行を追加します。

*/2 * * * * env > /usr/home/user1/env.output

私が収集できる限り、cron で最初に使用できる PATH はごくわずかです。Java は /usr/local/bin にあったので、それを crontab と kaboom のパスに追加しました! 出来た!

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

*/2 * * * * /usr/home/user1/server.check.sh >> /usr/home/user1/cron.log
于 2013-02-22T16:43:34.713 に答える