【发布时间】:2013-02-06 10:53:11
【问题描述】:
我创建了一个脚本来检查我的 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
【问题讨论】:
-
尝试添加 /bin/sh 调用脚本:
*/2 * * * * /bin/sh /usr/home/user1/server.check.sh >> /usr/home/user1/cron.log