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