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에 도움이 되지 않습니다.

관련 정보