У меня есть процесс java, который должен быть всегда запущен. Я написал следующую оболочку в программе хрон, чтобы проверить, что процесс Java:проверить, не работает ли процесс linux shell
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, который должен быть запущен.
Когда я выполняю файл оболочки отдельно, он выполняется хорошо. Но когда я выполняю вышеуказанный 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)
Где я иду не так.
Edit:
я запускаю файл 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' путь неправильный; вы не находите исходный файл. Убедитесь, что необходимые переменные среды заданы явно внутри вашего сценария оболочки. – Floris
У меня есть файл для запуска в этом пути /root/folder.And я дал cd/root/folder. Есть ли что-то неправильное в предоставлении команды cd в этом cron – ashu
Имеет ли он правильные разрешения для запуска ваших исполняемых файлов ? Cron работает как пользователь? Я бы прочитал ссылки, которые опубликовал @spaceknarf - их названия выглядят очень многообещающими. – Floris