Search code examples
javalinuxcron

Running jar with cron throws error: '/bin/sh: 1: java: not found'


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?


Solution

  • 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.