2010-12-17 14 views
0

나는 사이트에서 사용되는 데이터베이스의 정보를 매일 업데이트하기 위해 일련의 cron 작업을 매일 실행하는 웹 사이트를 구축하고 있습니다. 세 가지 환경 설정 : 개발 (내 컴퓨터), 준비 및 라이브. 스테이징 및 라이브 모두 공유 호스팅 계정입니다. 문제는 코드가 실행되는 환경에 따라 사용할 데이터베이스 액세스 자격 증명을 결정할 때 발생합니다. 이상적으로 세 가지 모두 동일한 자격 증명을 갖지만 스테이징 및 라이브가 공유 서버에 있으므로 데이터베이스 이름을 제어 할 수 없습니다. 내 컴퓨터에서 라이브 데이터베이스 이름과 액세스 자격 증명을 미러링했지만 준비 중에는이 작업을 수행 할 수 없습니다.Cron 작업이 준비 서버에서 실행 중인지 확인

if(environment === staging) { 
    //define db access constants for staging here 
else { 
    //define db access constants for live or dev here 
}} 

일반적으로 이런 종류의 물건에 대한 I는 $ _SERVER [사용하십시오 : 내 크론 작업이 뭔가를 실행할 때

내가 뭘 원하는 자동으로 올바른 환경에 대한 올바른 자격 증명을 선택하는 것입니다 'SERVER_NAME']하지만 Cron에서 실행 중이기 때문에 $ _SERVER auto global은 사용할 수 없습니다. 어떤 환경에서 스크립트가 cron 작업에서 실행되고 있는지 어떻게 알 수 있습니까?

STAGING=1 

을 다음 $_ENV['STAGING'] == 1 확인 :

답변

1

당신은 crontab 파일에 추가 환경 변수를 넣을 수 있습니다.

심지어

HOSTING_ENV=PRODUCTION 

다음 $_ENV['HOSTING_ENV'] == 'PRODUCTION' 확인합니다.

+0

은 배열에 접근 할 때'{'와']'가 아닌'{'와'}'이어야합니다. – scoates

+0

고마워,이게 내게 해결책을 준 것 같아. $ argv에 나타나는 명령 행 매개 변수를 사용하여 스크립트에 변수를 전달합니다. 스테이징에서 추가 매개 변수를 전달하고이를 사용하여 사용할 자격 증명을 결정하는 데 사용할 것입니다. – Jeremy

+0

CPanel 인터페이스를 통해서만 서버에 액세스 할 수 있으므로 crontab 파일에 액세스 할 수 없다는 것을 분명히해야합니다. – Jeremy

1

ajreal과 gms8994가 모두 좋은 환경 변수 솔루션입니다. 또 다른 방법은 현재의 호스트 이름 가져 php_uname()을 사용하는 것입니다 : 당신이 그때까지 플랫폼을 감지 할 수

아니라 PHP 명령 줄하여 도메인을 호출하여

[email protected]:~$ php -r 'echo php_uname("n") . "\n";' 
gimmebarvm-sean 
+0

감사합니다. Sean, 좋은 생각입니다. – Jeremy

1

wget을 통해 크론을 실행을 그 도메인

관련 문제