我需要学习如何使用Laravel中的cron作业。我可以看到文档没有指定这部分。我找到了一个教程,但它是关于Laravel-3的。你能否就如何安排每天运行一次的cron工作给我一些建议??有没有关于这个问题的教程?
到目前为止,我的代码如下:
JobDaemon.php:
<?php
use Illuminate\Console\Command;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputArgument;
class JobDaemon extends Command {
/**
* The console command name.
*
* @var string
*/
protected $name = 'job-daemon';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Get all recent jobs once a day.';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return void
*/
public function fire()
{
$this->info('fired');
}
/**
* Get the console command arguments.
*
* @return array
*/
protected function getArguments()
{
return array(
//array('example', InputArgument::REQUIRED, 'An example argument.'),
);
}
/**
* Get the console command options.
*
* @return array
*/
protected function getOptions()
{
return array(
//array('example', null, InputOption::VALUE_OPTIONAL, 'An example option.', null),
);
}
}
我使用以下命令进行设置
php artisan command:make JobDaemon
我的工匠档案如下:
<?php
Artisan::add(new JobDaemon);
我从我的控制台获得以下内容......
johnnemo@johnnemo:/opt/lampp/htdocs/e-support-uop$ tail -f /var/log/syslog | grep -i cron
Jan 1 18:31:09 johnnemo crontab[4484]: (johnnemo) REPLACE (johnnemo)
Jan 1 18:31:09 johnnemo crontab[4484]: (johnnemo) END EDIT (johnnemo)
Jan 1 18:35:01 johnnemo CRON[5054]: (johnnemo) CMD (php /opt/lampp/htdocs/e-support-uop/artisan job-daemon)
Jan 1 18:35:02 johnnemo CRON[5053]: (CRON) info (No MTA installed, discarding output)
Jan 1 18:39:01 johnnemo CRON[5064]: (root) CMD ( [ -x /usr/lib/php5/maxlifetime ] && [ -x /usr/lib/php5/sessionclean ] && [ -d /var/lib/php5 ] && /usr/lib/php5/sessionclean /var/lib/php5 $(/usr/lib/php5/maxlifetime))
Jan 1 18:40:01 johnnemo CRON[5076]: (johnnemo) CMD (php /opt/lampp/htdocs/e-support-uop/artisan job-daemon)
Jan 1 18:40:01 johnnemo CRON[5075]: (CRON) info (No MTA installed, discarding output)
答案 0 :(得分:21)
首先,您需要确保新命令已启动,因此如果您运行
php artisan list
'job-daemon'必须在命令列表中
然后你测试一下:
php artisan job-daemon
有用吗?很酷,现在您可以设置自己的编辑器:
export EDITOR=nano
用它打开crontab:
[sudo] crontab -e
将执行类型设置为php的正确路径:
type php
你应该得到像
这样的东西php is hashed (/opt/lampp/bin/php)
所以你的php可执行文件在
/opt/lampp/bin/php
这将打开并编辑当前的cron作业,sudo是可选的,可以打开 root crontab,只需添加一行与你的一行:
25 10 * * * /opt/lampp/bin/php /whatever/directory/your/site/is/artisan job-daemon
这将每天上午10:25运行你的命令。
每隔5分钟执行一次
*/5 * * * * /opt/lampp/bin/php /whatever/directory/your/site/is/artisan job-daemon
然后你tail
系统日志看它正在运行:
tail -f /var/log/syslog | grep -i cron
你应该看到像
这样的东西Jan 1 10:25:01 server CRON[19451]: (root) CMD (php /var/www/<siteName>/artisan job-daemon)
在你的命令中你不能真正在屏幕上打印东西,你不会看到它们打印,所以要测试你必须,例如,保存一些文件:
public function fire()
{
File::append('/tmp/laravel.txt', "fired\n");
Log::info('fired');
}
然后
tail -f /tmp/laravel.txt
实时查看结果。
答案 1 :(得分:1)
我对OP有类似的问题,安东尼奥的回答让我大部分都在那里,但不是100%。我试图从cPanel CRON Jobs页面安排作业,遇到404错误或没有错误,但也没有成功。对我来说,关键是以下几点:
Putty进入我的服务器,运行命令:
php artisan list
确保我的命令已列出
运行下一个命令:
输入php
对我来说,输出是“php is hashed(/ usr / local / bin / php)”
创建CRON命令时,我必须使用限定路径。此外,由于工匠不是全球可用的,因此您还必须使用合格的路径来获取它的可用位置。对我来说,这是我网站的laravel文件夹。最后一个问题是我必须在实际的工匠命令前加上“command:”
最后,我能够使用以下命令通过cPanel的CRON Jobs页面安排laravel命令:
/usr/local/bin/php /home/sitename/public_html/laravel/artisan command:TotalMadnessUpdateResultsCommand
另一个常见的问题是没有将以下内容添加到artisan.php文件中:
Artisan::add(new TotalMadnessUpdateResultsCommand);