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