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

그런데 왜 .bashrc를 충분히 소싱하지 못하는 걸까요? crontab에는 어떤 환경 변수가 있고 source .bashrc는 정확히 무엇을 수행합니까(crontab이 이를 고려하지 않도록)?

감사해요.

답변1

몇 가지 추측이 있지만 틀릴 수도 있습니다.

  • bash 쉘을 열면 bash 프로세스가 시작되고 .bashrc를 실행하면 해당 bash 프로세스의 환경만 변경됩니다.
  • crontab에는 개방형 bash 프로세스와 별개로 자체 프로세스가 있습니다.
  • .bashrc를 가져올 때 bash 프로세스만 변경하므로(crontab을 실행할 때 아무것도 변경되지 않지만??) crontab은 여전히 ​​환경 변수를 변경하지 않습니다.

따라서 .bashrc를 얻는 것은 crontab에 도움이 되지 않습니다.

관련 정보