기존 환경 변수를 사용하여 cron 명령을 실행하는 방법은 무엇입니까?
쉘 프롬프트에 있는 경우 echo $ORACLE_HOME
경로를 입력하고 가져올 수 있습니다. 이것은 내 환경 변수 중 하나입니다 ~/.profile
. 그러나 cron 스크립트에서 로드되지 않는 것 같아서 변수가 설정되지 않아 ~/.profile
스크립트가 실패합니다 .$ORACLE_HOME
존재하다이 문제작성자는 ~/.cronfile
cron에 대한 변수를 설정하는 구성 파일을 생성한다고 언급한 다음 ~/Cron
디렉토리에 저장한 스크립트에 모든 cron 명령을 로드하는 해결 방법을 취했습니다. 이와 같은 파일은 ~/.cronfile
좋은 생각처럼 들리지만 나머지 답변은 약간 번거로워 보이며 누군가가 동일한 결과를 얻을 수 있는 더 쉬운 방법을 알려줄 수 있기를 바랍니다.
스크립트 시작 부분에 이와 같은 것을 추가할 수 있을 것 같지만 source ~/.profile
중복될 수도 있습니다.
그렇다면 대화형 쉘 프로필에서 cron 스크립트 로드 변수를 어떻게 만들 수 있습니까?
답변1
crontab에서 명령을 실행하기 전에 . $HOME/.profile
.
0 5 * * * . $HOME/.profile; /path/to/command/to/run
Cron
셸에 대해서는 알려진 바가 없습니다. 셸은 시스템에 의해 시작되므로 최소한의 환경을 갖습니다. 원하는 것이 있으면 직접 가져와야합니다.
답변2
제가 더 쉽게 찾을 수 있는 또 다른 옵션은 cron을 사용하여 스크립트를 실행하고 스크립트에 환경을 포함시키는 것입니다.
crontab -e 파일에서:
SHELL=/bin/bash
*/1 * * * * $HOME/cron_job.sh
cron_job.sh 파일에서:
#!/bin/bash
source $HOME/.bash_profile
some_other_cmd
.bash_profile 소스 이후의 모든 명령은 마치 로그인한 것처럼 환경을 갖게 됩니다.
답변3
내가 더 쉽게 찾은 또 다른 옵션은 cron을 사용하여 스크립트를 실행하고 bash에 로그인하도록 지시하는 것이었습니다(따라서 /etc/profile.d/...
환경 정의를 사용함).
crontab -e
파일 에서 :
*/1 * * * * bash -l -c './cron_job.sh'
*/1 * * * * bash -l -c 'php -f ./cron_job.php'
소스 이후의 모든 명령은 .bash_profile
마치 로그인한 것처럼 환경을 갖게 됩니다.
답변4
이 구문은 확실히 도움이 될 것입니다. 구문을 이해하지 못하지만 작동합니다. Oracle은 Oracle Configuration Manager를 crontab에 배포할 때 이 구문을 사용하므로 이것이 올바른 솔루션이라고 생각합니다.
0 5 * * * SOME_ENV_VAR=some_value some_command some_parameters