如何在cakephp中设置cronjobs

how to setup cronjobs in cakephp

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

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 rescan execute

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

任何帮助将不胜感激。

我不知道是否有任何 "canonical" 方法可以做到这一点,但是我使用基于创建修改后的 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 中并使其可以通过网络访问),所以你还应该实现一些只允许通过服务访问它的东西在您的主机上运行它。