【发布时间】:2013-04-22 17:07:51
【问题描述】:
我有一个需要始终运行的 java 进程。我在 cron 程序中编写了以下 shell 来检查 java 进程:
if [ `ps aux | grep testjava | grep -v grep | wc -l` -ne 1 ];then
cd /root/folder
sh mytest.sh >test.log 2>test-err.log &
echo "mytest not running and restarted on "`date` >> /root/check-test.log
其中mytest.sh 包含必须运行的java 类。
当我单独执行 shell 文件时,它执行得很好。但是当我执行上面的 cron 时,它给了我以下异常:
Exception in thread "main" java.lang.NoClassDefFoundError: mytest/mytestprog
Caused by: java.lang.ClassNotFoundException: mytest.mytestprog
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
我哪里出错了。
编辑:
我运行 mytest.sh 文件,路径为$JAVA_HOME/bin/java -cp .:/root/lib/* -Djava.rmi.server.codebase=file:/root/folder/ -Djava.rmi.server.hostname=hostnameip -Djava.security.policy=server.policy -Xmx512m -Xms512m mytest.mytestprog
【问题讨论】:
-
我怀疑调用
mytest.sh时路径不对;您没有找到源文件。确保在你的 shell 脚本中明确设置了必要的环境变量。 -
我有文件要在这个路径 /root/folder 中运行。我已经给出了 cd /root/folder .,在那个 cron 中给出 cd 命令有什么问题
-
它是否具有运行可执行文件的正确权限? Cron 以什么用户身份运行?我会阅读@spaceknarf 发布的链接——它们的标题看起来很有前途。
-
是的,它有适当的权限
-
与其玩弄
ps,不如在/var/run下维护一个.pid文件。要编写可靠的守护进程,您可以尝试 [commons.apache.org/proper/commons-daemon/] 和/或 [commons.apache.org/proper/commons-daemon/jsvc.html]。