o crontab não consegue encontrar a variável de ambiente mesmo após obter .bashrc

o crontab não consegue encontrar a variável de ambiente mesmo após obter .bashrc
crontab -e
00 00 * * * /home/username/run.sh >> /home/username/log 2>&1

Dentro de run.sh:

source /home/username/.bashrc
java

Quando o trabalho crontab é acionado, recebo este erro no log:

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

No entanto, o caminho java está definido em /home/username/.bashrc, então eu esperava que o sourcing devesse definir o caminho java:

Eu sei que posso consertar isso:

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

Mas por que adquirir .bashrc não é suficiente? Quais variáveis ​​de ambiente o crontab possui exatamente e o que source .bashrc faz exatamente (para que o crontab não leve isso em consideração)?

Obrigado.

Responder1

Tenho algumas suposições, mas posso estar errado:

  • quando abrimos um shell bash, iniciamos um processo bash e, ao executar .bashrc, ele faz alterações apenas no ambiente deste processo bash
  • crontab tem seu próprio processo que não tem relação com o processo bash aberto
  • ao obter .bashrc, ele apenas faz alterações no processo bash (embora não haja nenhuma ao executar o crontab ??), portanto, o crontab ainda não possui nenhuma alteração na variável de ambiente

Portanto, obter .bashrc não ajuda o crontab.

informação relacionada