crontab не может найти переменную окружения даже после получения .bashrc

crontab не может найти переменную окружения даже после получения .bashrc
crontab -e
00 00 * * * /home/username/run.sh >> /home/username/log 2>&1

Внутри run.sh:

source /home/username/.bashrc
java

При запуске задания crontab в журнале появляется следующая ошибка:

/home/username/run.sh: 1: /home/username/run.sh: java: not found

Однако путь к Java задан в /home/username/.bashrc, поэтому я ожидал, что исходный код должен задать путь к Java:

Я знаю, что могу это исправить:

export PATH="/usr/local/jdk1.8.0_231/bin:$PATH"
java

Но почему недостаточно sourceing .bashrc? Какие именно переменные окружения есть в crontab и что именно делает source .bashrc (чтобы crontab не учитывал его)?

Спасибо.

решение1

У меня есть некоторые предположения, но они могут быть ошибочными:

  • когда мы открываем оболочку bash, мы запускаем процесс bash, и при запуске .bashrc он вносит изменения только в среду этого процесса bash.
  • crontab имеет свой собственный процесс, который не имеет никакого отношения к открытому процессу bash
  • при загрузке .bashrc он вносит изменения только в процесс bash (хотя при запуске crontab изменений нет?), поэтому crontab по-прежнему не вносит никаких изменений в переменную окружения

Таким образом, использование .bashrc не поможет crontab.

Связанный контент