I have scheduled my job to run every day at 12:30 with this command:
30 12 * * * java -jar test.jar
It throws error:
/bin/sh: 1: java: not found
I tried to run this command: java -jar test.jar
from shell and it worked just fine.
Now I don't understand. I would say it is happening because JAVA_HOME
environment variable is not set, but then why it works from shell?
The error tells you that the shell could not locate the java
binary to execute. This has nothing to do with the JAVA_HOME
environment variable, but with the PATH
variable which is consulted by sh
to find any command.
When you run your task from cron
, the shell did not receive the same initialization as your interactive shell where the command works for you. You'll equally find that JAVA_HOME
isn't set there, either.
Your login shell environment is different from the one your cronjob has. Use env
to print your environment.
Check the path on both -
Within cron (something like)
30 08 * * * env > ~/cronenv
.
In your login shell just use env
. Then compare the PATH variables.
As @Marko Topolnik already stated your PATH within cron obviously does not contain your java executables.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With