在Media Temple网格服务上运行CakePHP Cron作业

时间:2013-10-10 20:13:43

标签: php cakephp cron mediatemple

我的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');

    }

}

?>

我试图在Media Temple网格服务主机上每隔5分钟运行一次。

/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文档仅用于终端)。

1 个答案:

答案 0 :(得分:2)

以下是我为实现目标所做的工作:

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

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.');
    }
}

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

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”在这种情况下是我们的可执行文件,因此我们正在运行的程序。