PHP脚本从命令行工作,而不是从cron

PHP脚本从命令行工作,而不是从cron,php,mysql,cakephp,cron,Php,Mysql,Cakephp,Cron,我有一个CakePHP脚本,希望它能由cron作业运行。它可以从命令行正常运行,但似乎不能从cron运行。cron行类似于: */2 * * * * cd /path/to/app;../cake/console/cake do_update 脚本本身——我认为这可能太古怪了,以至于抛出cron——循环数据库中Realtors表的一个子集,使用系统时间来决定更新数据库的哪个50条记录片段: $realtors = $this->Realtor->find('all',array(

我有一个CakePHP脚本,希望它能由cron作业运行。它可以从命令行正常运行,但似乎不能从cron运行。cron行类似于:

*/2 * * * * cd /path/to/app;../cake/console/cake do_update
脚本本身——我认为这可能太古怪了,以至于抛出cron——循环数据库中Realtors表的一个子集,使用系统时间来决定更新数据库的哪个50条记录片段:

$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相关的有用见解中的一个答案…

我对cron不太熟悉,但我不认为您可以像那样同时运行两个命令

您可能要尝试:

*/2 * * * * cd /path/to/app && ../cake/console/cake do_update
这将导致两个命令一起运行,因为每个命令都返回一个数字来表示成功或失败,如果失败,则返回一个错误代码


我假设您的PHP文件还包括必要的!一行,指向PHP解释器,并且文件权限允许从命令行执行?i、 你可以直接运行上面的语句,它就可以运行了。

我试着把cd/path/to/app/在bash脚本中更新cake/console/cake do_,并在cron中运行脚本。但我不确定它是否有用。

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

/路径/to/cake/console/cron.sh

#!/bin/sh cd /path/to/app php ../cake/console/cake do_update 通常情况下,如果我不使用文件,我不关心应用程序的实际启动位置,而只是这样做

*/1 * * * * php /my/path/my_php.php
试着按照手册操作,它对我来说非常有用:

考虑到如果没有shebang,它在我的生产服务器上无法工作,而且每种脚本语言的功能都完全相同。。。我认为您确实需要shebang,除非该文件实际上是一个二进制可执行文件。我确实说过,在前面,我不太了解cron,我猜蛋糕-作为一个CakePHP构建的文件-确实有shebang?这称为检查中的尽职调查。@sberry Shebangs对于PHP脚本来说工作得很好,它与这里的任何其他脚本语言都没有什么不同。与Perl脚本相比,PHP很少使用它。 */1 * * * * php /my/path/my_php.php