PHP脚本可以从命令行运行,而不是从cron运行

时间:2010-11-25 01:01:41

标签: php mysql cakephp cron

我有一个CakePHP脚本,希望由cron作业运行。它从命令行运行良好,但似乎不是来自cron。 cron行类似于:

*/2 * * * * cd /path/to/app;../cake/console/cake do_update

脚本本身 - 这是我认为可能过于古怪的一点,在数据库中通过一个Realtors表的子集抛出cron循环,使用系统时间来决定哪个50 -record slice要更新数据库:

$realtors = $this->Realtor->find('all',array(
'conditions'=>array('Realtor.zone_id'=>1),
'order'=>array('Realtor.num DESC'),
'limit'=>50,
'offset'=>date("i")*25
));

所以我的问题是 - 是否有什么我在这里做什么显然会把循环的cron作业扔掉?而且,或许更重要的是,我的方法是将数据库在一小时内分成可管理的块疯狂吗? (我几乎是一个编程新手,所以我尝试了很多东西而不知道它们是否是良好的实践。)任何人都可以通过cron建议更好的循环和更新大量数据库记录的方法,防止单个查询过大而系统无法处理?

编辑:它不仅始终在命令行中运行,它还可以在其他服务器上由cron脚本运行时运行。我想在特定的服务器上只是搞砸了一些东西,所以看起来有一个与代码相关的解决方案是值得怀疑的!我将接受以下有用的与cron相关的见解中的答案......

4 个答案:

答案 0 :(得分:0)

我尝试在bash脚本中放入“cd /path/to/app;../cake/console/cake do_update”,然后在cron中运行脚本。但我不确定它是否会有所帮助。

答案 1 :(得分:0)

通常,您希望将所有命令行内容放入shell文件

/path/to/cake/console/cron.sh

#!/bin/sh
cd /path/to/app
php ../cake/console/cake do_update
*/2 * * * * sh /path/to/cake/cron.sh

通常我不关心应用程序实际启动的位置(如果我不使用文件)并且只是做

*/1 * * * * php /my/path/my_php.php

答案 2 :(得分:0)

尝试按照手册操作,它对我很有用:
http://book.cakephp.org/view/1110/Running-Shells-as-cronjobs

答案 3 :(得分:-1)

我对cron并不熟悉,但我认为你不能像这样一起运行两个命令。

您可能想尝试:

*/2 * * * * cd /path/to/app && ../cake/console/cake do_update

这将导致两个命令一起运行(因为每个命令都返回一个数字来表示成功或失败,并且如果失败,则会出现错误代码)

我假设您的PHP文件还包含必要的#!在开始时指向PHP解释器的行,并且文件权限允许从命令行执行? (即你可以直接在上面运行该语句并且它可以工作)