尝试使用cakephp和bashshell脚本在后台运行一个长时间运行的函数

尝试使用cakephp和bashshell脚本在后台运行一个长时间运行的函数,php,shell,cakephp,background,Php,Shell,Cakephp,Background,我在cakephp的控制器中有一个函数,它可能会运行数千秒。该函数基本上有一个链接列表,并联系几个API以从中获取各种SEO数据。因此,每个链接可能需要几秒钟的时间 我一直想弄个蛋糕壳来帮我做这件事,但运气不好。我最近得到的是这个bash脚本,它使用一个参数运行所需的shell(在本例中为30,它是系统上用户的id) 然后从我的控制器中调用此脚本 $result = exec("sh update_links.sh > update2.txt 2> update2.txt"); 现

我在cakephp的控制器中有一个函数,它可能会运行数千秒。该函数基本上有一个链接列表,并联系几个API以从中获取各种SEO数据。因此,每个链接可能需要几秒钟的时间

我一直想弄个蛋糕壳来帮我做这件事,但运气不好。我最近得到的是这个bash脚本,它使用一个参数运行所需的shell(在本例中为30,它是系统上用户的id)

然后从我的控制器中调用此脚本

$result = exec("sh update_links.sh > update2.txt 2> update2.txt");
现在,如果我使用ssh连接到服务器并直接从那里运行它,bash脚本就可以工作。所有链接更新正确,一切正常。从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和会话cookies,它们在某种程度上起作用,但需要特定的用户登录凭据。它绕过了系统登录,但我无法让它访问任何模型数据

有人知道我怎样才能让它工作吗?基本上,我只想在后台运行这个长函数,同时访问cakephp模型


谢谢大家

尝试使用
updateN.txt文件的绝对路径。web服务器以非特权用户的身份运行,因此您在尝试写入默认工作路径时可能会遇到问题

Shell脚本:

#!/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");

你用的是哪种版本的蛋糕?
$result = exec("sh /path/to/update_links.sh > /tmp/linkmoni/update2.txt 2>&1");