기존 환경 변수로 cron 명령을 어떻게 실행할 수 있습니까?
쉘 프롬프트에 있으면 입력 echo $ORACLE_HOME
하고 경로를 얻을 수 있습니다 . 이것은 내 환경 변수 중 하나입니다 ~/.profile
. 그러나 ~/.profile
fron cron 스크립트가로드되지 않으므로 $ORACLE_HOME
변수가 설정되지 않아 스크립트가 실패 합니다.
에서 이 질문에 저자는 창조 언급한다 ~/.cronfile
크론에 대한 변수를 설정 프로파일을 한 후 그는 자신의 유지 스크립트로 그의 모든 크론 명령로드 해결하지 ~/Cron
디렉토리. 같은 파일 ~/.cronfile
은 좋은 생각 처럼 들리지만 나머지 답변은 약간 성가신 것으로 보이며 누군가가 같은 결과를 얻는 더 쉬운 방법을 말해 줄 수 있기를 바랍니다.
스크립트를 시작할 때 비슷한 것을 추가 source ~/.profile
할 수는 있지만 중복 될 수 있다고 생각합니다.
그렇다면 어떻게 cron 스크립트가 대화 형 쉘 프로파일에서 변수를로드 할 수 있습니까?
답변
crontab에서 명령을 실행하기 전에을 추가하십시오 . $HOME/.profile
. 예를 들면 다음과 같습니다.
0 5 * * * . $HOME/.profile; /path/to/command/to/run
Cron
껍질에 대해서는 아무것도 모른다. 시스템에 의해 시작되므로 환경이 최소화됩니다. 무언가를 원한다면 스스로 가져와야합니다.
답변
더 쉬운 또 다른 옵션은 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의 소스 다음에 오는 모든 명령은 마치 로그인 한 것처럼 환경을 갖게됩니다.
답변
더 쉬운 또 다른 옵션은 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
은 마치 로그인 한 것처럼 환경을 갖게됩니다.
답변
나쁜 생각. 일반적인 관행은 크론 작업에서 실행되는 스크립트에서 필요한 모든 환경 변수를 구체적으로 설정하는 것입니다.
답변
이 구문은 확실히 도움이됩니다. 구문을 이해하지 못하지만 작동합니다. Oracle은 Oracle Configuration Manager를 crontab에 배포 할 때이 구문을 사용하므로 이것이 올바른 솔루션이라고 생각합니다.
0 5 * * * SOME_ENV_VAR=some_value some_command some_parameters
답변
나는 최근에 전체 cronjob을 루트로 실행 해야하는 동시에 다른 사용자로 하위 명령을 실행 해야하는 경우를 보았습니다 (사용자 환경을 소싱해야 함). 나는 다음과 같은 접근 방식으로 갔다.
# m h dom mon dow user command
*/5 * * * * root (sudo -i -u <the user> command-to-be-run-as-user) && command-to-be-run-as-root
중요한 부분은 주어진 명령을 별도의 로그인 쉘에서 실행 하는 인수 -i
입니다 sudo
(이는 사용자의 도트 파일이 소스 화됨을 의미합니다).
추신 : user
열은 파일 /etc/crontab
과 /etc/cron.d/*
파일 에서만 사용할 수 있습니다.