Reputation: 5080
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?
Upvotes: 4
Views: 10948
Reputation: 21
Another option i tried is to use the path of the java installed.
java -version
whereis java
30 12 * * * /path_from_prev_step/java -jar test.jar
This will also allow you to run this jar with different java portable version if the server has a older version installed.
Upvotes: 0
Reputation: 7891
You can add a line into your crontab file that contains the path that you need:
# m h dom mon dow command
PATH=.....
You probably need something like this:
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
You can also use echo $PATH
to find out what you have in your regular environment and simply use that value.
Upvotes: 0
Reputation: 8611
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.
Upvotes: 1
Reputation: 200206
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.
Upvotes: 1