glassfish启动脚本通过crontab失败

时间:2013-02-21 07:29:50

标签: cron glassfish crontab

我创建了一个脚本来检查我的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

1 个答案:

答案 0 :(得分:0)

好的...在另一个网站上找到了答案,但我想我会在这里添加答案以供将来参考。

问题是路径!!即使设置了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