我创build了一个脚本来检查我的glassfish服务器是否正在运行,如果不是,它会尝试终止java进程以确保它没有挂起,然后发出asadmin start-domain命令
如果此脚本从命令行运行,则100%成功。 从cron选项卡运行时,每行都会运行,但是asadmin start-domain行似乎没有执行,或者至less没有完成,即服务器在此脚本运行后未运行。
对于不熟悉glassfish的人或者用于启动服务器的asadmin实用程序,我的理解是使用分叉进程。 这可以通过cron导致一个问题?
同样,在今天的所有testing中,脚本从命令行运行完成。 一旦它通过cron执行,它不会完成。
在此先感谢任何帮助…我拉我的头发试图使这项工作!
#!/bin/bash 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" [email protected] 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
是否有可能在cronjob中${JAVA_HOME}没有设置?
Java总是需要在环境中设置某些环境variables。 也许你使用你的cli时自动设置它们,但cronjob没有它们。 试着对你的cli做env ,看看是否有一些java相关的东西,比如${JAVA_HOME} ,如果是的话确保cronjob也有它们。 例如,通过将它们添加到脚本的顶部。
好的…在另一个网站上find了这个答案,但我想我会在这里添加答案,供将来参考。
问题是path! 即使设置了java_home,java本身也不在cron守护进程的path中。
快速testing以查看可用于cron的path,请添加以下行:
*/2 * * * * env > /usr/home/user1/env.output
从我能收集到的,最初可用于cron的PATH是相当小的。 由于java在/ usr / local / bin中,我将其添加到crontab和kaboom的path中! 有效!
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