기존 환경 변수를 사용하여 cron 명령을 실행하는 방법은 무엇입니까?

기존 환경 변수를 사용하여 cron 명령을 실행하는 방법은 무엇입니까?

기존 환경 변수를 사용하여 cron 명령을 실행하는 방법은 무엇입니까?

쉘 프롬프트에 있는 경우 echo $ORACLE_HOME경로를 입력하고 가져올 수 있습니다. 이것은 내 환경 변수 중 하나입니다 ~/.profile. 그러나 cron 스크립트에서 로드되지 않는 것 같아서 변수가 설정되지 않아 ~/.profile스크립트가 실패합니다 .$ORACLE_HOME

존재하다이 문제작성자는 ~/.cronfilecron에 대한 변수를 설정하는 구성 파일을 생성한다고 언급한 다음 ~/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

관련 정보