2

常に実行する必要がある Java プロセスがあります。そのJavaプロセスをチェックするために、cronプログラムで次のシェルを作成しました。

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

wheremytest.shには、実行する必要がある Java クラスが含まれています。

シェルファイルを個別に実行すると、うまく実行されます。しかし、上記の 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

4

2 に答える 2

1

でジョブを実行するとcron、環境が異なります。ほとんどの場合、.bashrcロードされていません。そして、多くの場合、CLASSPATHそのファイルに設定されています。したがって、CLASSPATHはおそらく正しくありません。

で環境を設定する方法についてはcron、次を参照してください。

于 2013-04-29T05:35:18.187 に答える