如何在cakephp中设置cronjobs

时间:2018-09-15 15:09:24

标签: php cakephp cakephp-3.0

我正在尝试在cakephp3中设置cronjobs,我可以创建一个命令类

class RescanCommand extends Command { 
public function sendMail() {
    $email = new Email();

    // Sample SMTP configuration.
    Email::setConfigTransport('mailtrap', [
        'host' => 'smtp.mailtrap.io',
        'port' => 25,
        'username' => 'username',
        'password' => 'pass',
        'className' => 'Smtp'
    ]);

    $email->setFrom(['test@test.com' => 'CSV file'])
        ->setTo('test@test.com')
        ->setSubject('CSV Link File')
        ->send('Please find attached a copy of the links');
}

public function execute(Arguments $args, ConsoleIo $io) {
    $this->sendMail();
}
} 

为了设置cronjob,我必须登录cpanel并创建格式为

的cronjob
  

https://sontest.000webhostapp.com/myscript.php

要在cakephp中设置cronjob,我必须写

  
      
    •   
      •   
        •   
          •   
          • cd / Application / MAMP / htdocs / music && bin / cake重新扫描执行
          •   
        •   
      •   
    •   
  •   

我的问题是如何为服务器创建cronjob并通过cpanel访问它,我需要在webroot中拥有脚本才能访问。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我不知道是否存在任何“规范”的方法,但是基于创建修改后的bin / cake.php文件并将其放入托管提供程序所需的目录的方法,我取得了良好的效果(可以是任何应用程序目录内部或外部的目录)。下面的示例文件:

#!/usr/bin/php -q
<?php
require 'path_to/config/requirements.php';
require 'path_to/vendor/autoload.php';

use App\Application;
use Cake\Console\CommandRunner;

$runner = new CommandRunner(new Application('path_to/config'), 'cake'); //path to your app 'config' dir
$command = [
    "", //first can be empty (normally it's 'cake')
    "command", //your command/shell name
];
exit($runner->run($command));

您还应该记住,定义cronjobs的文件不应被所有人访问(例如,将其放入webroot并使其可以通过Web访问),因此,您还应该实现一些允许仅通过运行它的服务对其进行访问的文件在您的主机上。