/ / Running jar with cron zgłasza błąd: '/ bin / sh: 1: java: not found' - java, linux, cron

Uruchamianie słoika z cronem powoduje błąd: "/ bin / sh: 1: java: not found" - java, linux, cron

Zaplanowałem, że moje zadanie będzie uruchamiane codziennie o 12:30 za pomocą tego polecenia:

30 12 * * * java -jar test.jar

Zgłasza błąd:

/bin/sh: 1: java: not found

Próbowałem uruchomić to polecenie: java -jar test.jar z powłoki i działało dobrze.

Teraz nie rozumiem, powiedziałbym, że tak się dzieje, ponieważ JAVA_HOME zmienna środowiskowa nie jest ustawiona, ale dlaczego działa z powłoki?

Odpowiedzi:

1 dla odpowiedzi № 1

Błąd informuje, że powłoka nie mogła zlokalizować java binarny do wykonania. To nie ma nic wspólnego z JAVA_HOME zmienna środowiskowa, ale z PATH zmienna, która jest konsultowana przez sh znaleźć dowolne polecenie.

Po uruchomieniu zadania z cron, powłoka nie otrzymała tej samej inicjalizacji, co twoja interaktywna powłoka, w której działa polecenie. Równie dobrze to znajdziesz JAVA_HOME nie jest tam również ustawiony.


1 dla odpowiedzi nr 2

Twoje środowisko powłoki logowania różni się od tego, które posiada twój cronjob. Posługiwać się envwydrukować swoje środowisko.

Sprawdź ścieżkę na obu - W cronie (coś podobnego) 30 08 * * * env > ~/cronenv. W powłoce logowania po prostu użyj env. Następnie porównaj zmienne PATH. Ponieważ @Marko Topolnik już stwierdził, że PATH w cronie oczywiście nie zawiera plików wykonywalnych java.


0 dla odpowiedzi № 3

Możesz dodać linię do pliku crontab, która zawiera ścieżkę, której potrzebujesz:

# m h  dom mon dow   command
PATH=.....

Prawdopodobnie potrzebujesz czegoś takiego:

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

Możesz także użyć echo $PATH aby dowiedzieć się, co masz w swoim normalnym środowisku i po prostu użyć tej wartości.