매시간마다 crontab을 실행하고 있습니다. .bash_profile
사용자가 터미널에서 작업을 실행할 때 작동 하는 환경 변수가 있지만 사용자는 crontab에서 실행할 때 환경 변수를 선택하지 않습니다.
나는 그들을 설정 해봤 .profile
하고 .bashrc
있지만 여전히 발탁하지 않는 것. crontab이 가져올 수있는 환경 변수를 어디에 둘 수 있는지 아는 사람이 있습니까?
답변
‘cron’이 명령을 실행하기 전에 환경을 설정하는 쉘 스크립트를 실행하십시오.
항상.
# @(#)$Id: crontab,v 4.2 2007/09/17 02:41:00 jleffler Exp $
# Crontab file for Home Directory for Jonathan Leffler (JL)
#-----------------------------------------------------------------------------
#Min Hour Day Month Weekday Command
#-----------------------------------------------------------------------------
0 * * * * /usr/bin/ksh /work1/jleffler/bin/Cron/hourly
1 1 * * * /usr/bin/ksh /work1/jleffler/bin/Cron/daily
23 1 * * 1-5 /usr/bin/ksh /work1/jleffler/bin/Cron/weekday
2 3 * * 0 /usr/bin/ksh /work1/jleffler/bin/Cron/weekly
21 3 1 * * /usr/bin/ksh /work1/jleffler/bin/Cron/monthly
~ / bin / Cron의 스크립트는 모두 다음과 같은 단일 스크립트 ‘runcron’에 대한 링크입니다.
: "$Id: runcron.sh,v 2.1 2001/02/27 00:53:22 jleffler Exp $"
#
# Commands to be performed by Cron (no debugging options)
# Set environment -- not done by cron (usually switches HOME)
. $HOME/.cronfile
base=`basename $0`
cmd=${REAL_HOME:-/real/home}/bin/$base
if [ ! -x $cmd ]
then cmd=${HOME}/bin/$base
fi
exec $cmd ${@:+"$@"}
(오래된 코딩 표준을 사용하여 작성했습니다. 요즘에는 처음에 shebang ‘#!’을 사용합니다.)
‘~ / .cronfile’은 엄청나게 비대화 형이며 시끄러운 소리를 내기 위해 cron에서 사용하는 프로파일의 변형입니다. 대신 .profile을 실행하도록 조정할 수 있습니다. (REAL_HOME 물건은 내 환경의 인공물입니다. $ HOME과 같은 척 할 수 있습니다.)
따라서이 코드는 적절한 환경을 읽은 다음 내 홈 디렉토리에서 비 크론 버전의 명령을 실행합니다. 예를 들어, ‘주중’명령은 다음과 같습니다.
: "@(#)$Id: weekday.sh,v 1.10 2007/09/17 02:42:03 jleffler Exp $"
#
# Commands to be done each weekday
# Update ICSCOPE
n.updics
‘daily’명령이 더 간단합니다.
: "@(#)$Id: daily.sh,v 1.5 1997/06/02 22:04:21 johnl Exp $"
#
# Commands to be done daily
# Nothing -- most things are done on weekdays only
exit 0
답변
crontab -e
명령 행에서 실행할 때 crontab 자체에서 환경 변수를 정의 할 수 있습니다 .
LANG=nb_NO.UTF-8
LC_ALL=nb_NO.UTF-8
# m h dom mon dow command
* * * * * sleep 5s && echo "yo"
이 기능은 특정 cron 구현에서만 사용할 수 있습니다. 우분투와 데비안은 현재 vixie-cron 을 사용하는데,이를 crontab 파일 (GNU mcron )에 선언 할 수 있습니다 .
아치 리눅스 와 레드햇 사용 cronie 하지 않는 환경 변수가 선언 될 수 있도록하고, cron.log에 구문 오류가 발생합니다. 해결 방법은 항목별로 수행 할 수 있습니다.
# m h dom mon dow command
* * * * * export LC_ALL=nb_NO.UTF-8; sleep 5s && echo "yo"
답변
이 문제에 대한 해결책이 하나 더 있습니다.
0 5 * * * . $HOME/.profile; /path/to/command/to/run
이 경우 $HOME/.profile
파일에 정의 된 모든 환경 변수를 선택 합니다.
물론 $HOME
설정되지 않은 경우 전체 경로로 바꿔야합니다 $HOME
.
답변
/etc/environment
우분투 에서 vars를 설정하면 나를 위해 일했습니다. 12.04부터 /etc/environment
cron에 대한 변수 가로드됩니다.
답변
스크립트를 시작하면 다음과 같이 cron을 통해 실행됩니다.
#!/bin/bash -l
그들은 ~/.bash_profile
환경 변수를 선택해야합니다
답변
내가 더 쉽게 찾은 @carestad 예제에서 확장하는 것은 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의 소스 다음에 오는 모든 명령은 마치 로그인 한 것처럼 환경을 갖게됩니다.
답변
나를 위해 PHP 응용 프로그램의 환경 변수를 설정해야했습니다. crontab에 다음 코드를 추가하여 다시 사랑했습니다.
$ sudo crontab -e
크론 탭 :
ENVIRONMENT_VAR=production
* * * * * /home/deploy/my_app/cron/cron.doSomethingWonderful.php
doSomethingWonderful.php 내부에서 다음을 사용하여 환경 값을 얻을 수 있습니다.
<?php
echo $_SERVER['ENVIRONMENT_VAR']; # => "production"
이게 도움이 되길 바란다!