2012-03-26 1 views
1

나는 수천 초 동안 실행될 수있는 cakephp의 컨트롤러에 기능이 있습니다. 이 함수는 기본적으로 링크 목록을 가지고 있으며 여러 API를 통해 다양한 SEO 데이터를 얻을 수 있습니다. 따라서 각 링크에는 각각 몇 초가 걸릴 수 있습니다.cakephp 및 bash 쉘 스크립트를 사용하여 백그라운드에서 장기 실행 기능을 실행하려고 시도했습니다.

나는 나를 위해 이것을 할 수있는 케이크 껍질을 얻으려고했지만 행운이 없다. 내가 온 가장 가까운 필요한 매개 변수와 쉘 실행이 bash는 스크립트 것입니다 (시스템에서 사용자의 ID이 경우에 30.)

/home/linkmoni/public_html/cake/console/cake -app /home/linkmoni/public_html/app updateuserlinks 30 > update3.txt 2> update3.err & 

다음 내에서이 스크립트를 호출 내 컨트롤러

$result = exec("sh update_links.sh > update2.txt 2> update2.txt"); 

이제 bash 스크립트는 내 서버에 ssh를 설치하고 거기에서 직접 실행하면 작동합니다. 모든 링크가 올바르게 업데이트되고 모든 것이 정상입니다. PHP exec에서 실행하면 문제가있는 것 같습니다. 지금까지 내가 말할 수있는 그것이 사용자의 요구 사항과 관련 년대에 로그인해야합니다.

을 위의 코드를 실행 한 후 나는이에 도착하기 전에 텍스트 만이 update3.txt

Status: 302 Moved Temporarily 
X-Powered-By: PHP/5.2.17 
P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM" 
Location: http://linkmoni.com/~linkmoni/links 
Content-type: text/html 

에서 발견된다 포인트 나는 wget과 특정 쿠키를 필요로하지만 특정 사용자 로그인 자격 증명을 필요로하는 세션 쿠키로 어지럽 혔습니다. 이것은 시스템 로그인을 건너 뛰었지만 모델 데이터에 액세스 할 수 없었습니다.

누구나 내가 어떻게 작동하는지 알 수 있습니까? 기본적으로 내가하고 싶은 것은 cakephp 모델에 액세스하는 동안 백그라운드에서이 긴 함수를 실행하는 것입니다.

감사합니다.

+0

을 사용하는 케이크 버전? – mark

답변

0

updateN.txt 파일의 절대 경로를 사용해보십시오. 웹 서버는 권한이없는 사용자로 실행되므로 기본 작업 경로에 쓰는 데 문제가있을 수 있습니다.

쉘 스크립트 : 앱에

#!/bin/sh 
USER_ID=$1 
WEB_ROOT=/home/linkmoni/public_html 
CAKE=${WEB_ROOT}/cake/console/cake 
WORK_PATH=/tmp/linkmoni/updateuserlinks 
OUTFILE=${WORK_PATH}/update-${USER_ID}.txt 
ERRFILE=${WORK_PATH}/update-${USER_ID}.err 

mkdir -p ${WORK_PATH} 

${CAKE} -app ${WEB_ROOT}/app updateuserlinks ${USER_ID} \ 
    > ${OUTFILE} 2> ${ERRFILE} & 

: 당신이

$result = exec("sh /path/to/update_links.sh > /tmp/linkmoni/update2.txt 2>&1"); 
관련 문제