我有一个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相关的见解中的答案......
答案 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解释器的行,并且文件权限允许从命令行执行? (即你可以直接在上面运行该语句并且它可以工作)