2011-11-22 145 views
2

我有3个脚本可以做一些事情。 我想连续并且同时运行它们。php脚本持续运行,并与cronjob同时运行

比方说,例如: 第一个脚本花了30分钟才完成。 第二 - 20分钟。 第三 - 5分钟。

所以我需要他们中的每个人在完成后立即运行。 3个脚本在同一个数据库中进行更新,但他们需要单独工作。 他们可以一起跑,但不是几次(我的英语很烂,对不起)。 让我们来解释一下我的意思是用例如:

firstScript.php is running 
secondScript.php is running 
thirdScript.php is running 

firstScript.php trying to start but it still running. Wait.(till finish) 

可能有些shell脚本将做的工作,但如何?

+0

所有三个脚本都可以通过url访问吗?我唯一能想到的就是创建一个cron脚本,它们依次卷曲并等待响应,然后再运行下一个脚本,但这是一个非常难看的解决方案。考虑一下 - 这些脚本是否可以通过您网站中其他地方的用户流量来运行,使用它们的请求来进行远程调用? php作为“请求运行”的本质使其很难用于这样的任务。 – DeaconDesperado

+0

没有。 他们无法通过网址访问。我需要手动运行它们。 – Kirev

+0

它是否可以将状态保存到磁盘?我可以想到一些方法可以保存分页文件的运行和运行时间,首先加载文件并确定要从中执行的操作。 – DeaconDesperado

回答

3

做一个bash脚本,需要一个参数,并将其做这样的事情:

if [ -f /tmp/$1 ] 
then 
    echo "Script already running" 
else 
    touch /tmp/$1 
    php $1 
    rm /tmp/$1 
fi 

设置一个cron运行此脚本,并通过它,你要运行的PHP脚本的名称。

+0

谢谢! 它工作完美! – Kirev

0

你可以在php脚本死之前执行一个shell命令。例如:

while($i < 1000) 
{ 
$i++; 
} 
shell_exec("bin/php.exe some_script.php"); 

如果你是一个共享的主机帐户的工作,这可能无法工作做安全问题。 请注意,需要为您的服务器编辑“bin/php.exe”,指向您的php安装位置。

+0

嗯..它只是冻结了几秒钟,并且不再运行脚本。 安全模式关闭,我正在使用VPS。 – Kirev