
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.