我正在尝试在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(['[email protected]' => 'CSV file'])
->setTo('[email protected]')
->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
在cakephp中设置cronjob我必须写
- cd / Application / MAMP / htdocs / music && bin / cake重新扫描执行
我的问题是我如何为服务器制作cronjob并通过cpanel访问它,我需要在webroot中访问该脚本。
任何帮助都会很感激。
我不知道是否存在任何“规范”的方式,但我的方法很好,基于创建一个修改后的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访问),因此您还应该实现允许仅通过在您的托管上运行它的服务来访问它的内容。