Я призначив свою роботу для запуску щодня о 12:30 за допомогою цієї команди:
30 12 * * * java -jar test.jar
Це кидає помилку:
/bin/sh: 1: java: not found
Я спробував запустити цю команду: java -jar test.jar
від оболонки і це спрацювало відмінно.
Тепер я не розумію. Я б сказав, що це відбувається тому, що JAVA_HOME
змінна середовища не встановлена, але тоді чому вона працює з оболонки?
Відповіді:
1 для відповіді № 1Помилка повідомляє, що оболонка не може знайти java
двійковий для виконання. Це не має нічого спільного з JAVA_HOME
змінної середовища, але з PATH
змінна, з якою здійснюється консультація sh
щоб знайти будь-яку команду.
Коли ви виконуєте своє завдання з cron
, оболонка не отримала таку ж ініціалізацію, як інтерактивна оболонка, де команда працює для вас. Ви так само знайдете JAVA_HOME
Тут також не встановлено.
1 для відповіді № 2
Ваше середовище оболонки входу в систему відрізняється від того, що має ваша cronjob. Використовуйте env
для друку вашого середовища.
Перевірте шлях на обох - У межах cron (щось подібне)
30 08 * * * env > ~/cronenv
. У вашій оболонці входу просто використовуйте env
. Потім порівняйте змінні PATH. Як @ Марко Топольник вже заявив, що ваш PATH в cron, очевидно, не містить ваших виконуваних Java-файлів.
0 для відповіді № 3
Можна додати рядок у ваш файл crontab, який містить потрібний вам шлях:
# m h dom mon dow command
PATH=.....
Можливо, вам потрібно щось на зразок цього:
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
Ви також можете використовувати echo $PATH
щоб дізнатися, що у вас є у звичайному середовищі, і просто використати це значення.