【问题标题】:Running CakePHP Cron jobs on Media Temple grid service在 Media Temple 网格服务上运行 CakePHP Cron 作业
【发布时间】:2013-10-18 18:39:46
【问题描述】:

我的 CakePHP 应用程序中有以下 Shell:

<?php 

class MyShell extends Shell {

    public function sendEmail() {

        App::uses('CakeEmail', 'Network/Email');

        $email = new CakeEmail();

        $email->from('cameron@driz.co.uk');

        $email->to('cameron@driz.co.uk');

        $email->subject('Test Email from Cron');

        $result = $email->send('Hello from Cron');

    }

}

?>

我尝试每 5 分钟运行一次,作为我的 Media Temple Grid Service 主机上的测试。

/home/####/domains/driz.co.uk/html/app && Console/cake my_shell send_email 

cd /home/####/domains/driz.co.uk/html && Console/cake my_shell send_email 

cd /home/####/domains/driz.co.uk/html/app && Console/cake my_shell send_email 

php /home/####/domains/driz.co.uk/html/app/Console/Command/MyShell.php

我已经尝试了以上所有方法,但没有一个有效...有什么想法吗?

(注意:当您在管理面板中指定这些时间与实际命令分开时,时间会丢失)

有没有人有在 Media Temple 上运行 CakePHP cron 作业的经验?我询问了 MT 支持,他们解释说前 3 行不起作用,因为它们不是对文件的直接命令(显然 CakePHP 文档仅适用于终端)。

【问题讨论】:

    标签: php cakephp cron mediatemple


    【解决方案1】:

    这是我为使其正常工作所做的:

    修改了您的电子邮件脚本以包含一些输出:

    class MyShell extends Shell {
        public function sendEmail() {
            App::uses('CakeEmail', 'Network/Email');
            $email = new CakeEmail();
            $email->from('user@domain.com');
            $email->to('user@domain.com');
            $email->subject('Test Email from Cron');
            $result = $email->send('Hello from Cron');
            $this->out('Email sent successfully.');
        }
    }
    

    接下来,我通过控制台进行了测试以确保它可以正常工作。对于上面的代码,docs 省略了“MyShell”中的“Shell”后缀,第二个参数是函数名。这是从应用程序根目录 /home/#####/domains/mydomain.com/html/cake/cakephp/app 为我工作的 CLI 命令。

    Console/cake my sendEmail
    

    输出:

    Welcome to CakePHP v2.4.1 Console
    ---------------------------------------------------------------
    App : app
    Path: /nfs/c##/h##/mnt/#####/domains/mydomain.com/html/cake/cakephp/app/
    ---------------------------------------------------------------
    Email sent.
    

    我在MT(gs)仪表盘命令框中的值是根据this构造的。它包括:

    cd 'app_root' && Console/cake 'class_name_sans_shell' 'function_name'
    

    对于上面的代码,结果是:

    cd /home/#####/domains/mydomain.com/html/cake/cakephp/app && Console/cake my sendEmail
    

    值得注意的是,在这种情况下,“Console/cake”是我们的可执行文件,所以这就是我们正在运行的程序。

    【讨论】:

    • 谁工作了 :) 真正奇怪的是 MT 支持代理说上面的代码不正确...... :P 但它现在对我有用!谢谢。
    最近更新 更多