我需要学习如何在 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
我的 artisan 文件如下:
<?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)
最佳答案
首先你需要确保你的新命令已经启动,所以如果你运行
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 的 optional ,只需添加一行:
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 -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
实时查看结果。
关于php - Laravel-4 定时任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20870032/
我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时
如何使用RSpec::Core::RakeTask初始化RSpecRake任务?require'rspec/core/rake_task'RSpec::Core::RakeTask.newdo|t|#whatdoIputinhere?endInitialize函数记录在http://rubydoc.info/github/rspec/rspec-core/RSpec/Core/RakeTask#initialize-instance_method没有很好的记录;它只是说:-(RakeTask)initialize(*args,&task_block)AnewinstanceofRake
我写了一个非常简单的rake任务来尝试找到这个问题的根源。namespace:foodotaskbar::environmentdoputs'RUNNING'endend当在控制台中执行rakefoo:bar时,输出为:RUNNINGRUNNING当我执行任何rake任务时会发生这种情况。有没有人遇到过这样的事情?编辑上面的rake任务就是写在那个.rake文件中的所有内容。这是当前正在使用的Rakefile。requireFile.expand_path('../config/application',__FILE__)OurApp::Application.load_tasks这里
我以前没有使用过cron,所以我不能确定我这样做是对的。我想要自动化的任务似乎没有运行。我在终端中执行了这些步骤:sudogeminstall每当切换到应用程序目录无论何时。(这创建了文件schedule.rb)我将此代码添加到schedule.rb:every10.minutesdorunner"User.vote",environment=>"development"endevery:hourdorunner"Digest.rss",:environment=>"development"end我将此代码添加到deploy.rb:after"deploy:symlink","depl
如何在Rake任务中运行Capybara功能?例如:访问('http://google.com')谢谢! 最佳答案 在任务中尝试这样的事情:require'capybara'require'capybara/dsl'Capybara.current_driver=:seleniumBrowser=Class.new{includeCapybara::DSL}page=Browser.new.pagepage.visit("http://www.google.com")puts(page.html)
我正在根据Rakefile中的现有测试文件动态生成测试任务。假设您有各种以模式命名的单元测试文件test_.rb.所以我正在做的是创建一个以“测试”命名空间内的文件名命名的任务。使用下面的代码,我可以用raketest:调用所有测试require'rake/testtask'task:default=>'test:all'namespace:testdodesc"Runalltests"Rake::TestTask.new(:all)do|t|t.test_files=FileList['test_*.rb']endFileList['test_*.rb'].eachdo|task|n
根据thispostbyStephenHagemann,我正在尝试为我的一个rake任务编写Rspec测试.lib/tasks/retry.rake:namespace:retrydotask:message,[:message_id]=>[:environment]do|t,args|TextMessage.new.resend!(args[:message_id])endendspec/tasks/retry_spec.rb:require'rails_helper'require'rake'describe'retrynamespaceraketask'dodescribe're
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我来自C、php和bash背景,很容易学习,因为它们都有相同的C结构,我可以将其与我已经知道的联系起来。然后2年前我学了Python并且学得很好,Python对我来说比Ruby更容易学。然后从去年开始,我一直在尝试学习Ruby,然后是Rails,我承认,直到现在我还是学不会,讽刺的是那些打着简单易学的烙印,但是对于我这样一个老练的程序员来说,我只是无法将它
我正在使用jeweler为Rails3创建一个gem。该gem包含一个rake任务,它所做的其中一件事是删除数据库,所以我正在使用“database_cleaner”。我在gem的Gemfile中指定gem依赖项gem'database_cleaner'在Rakefile中Jeweler::Tasks.newdo|gem|...gem.add_dependency'database_cleaner'end然后在lib中我创建了文件my_gem.rb和tasks.rake。如下,my_gem.rb:moduleMyGemclassRailtie和tasks.rake:task:my_ta
我可以像这样调用一个Rake任务并设置一个环境变量:$ONE=1raketemp:both但是如何设置两个环境变量呢?这行不通:$ONE=1TWO=2raketemp:both这行得通,但读起来很困惑:$ONE=1raketemp:bothTWO=2如何在调用rake之前传递多个环境? 最佳答案 同意@Ernest;它应该工作。这是一个示例...示例rake任务以回显变量:task:echo_envdoputs"VAR1:#{ENV['VAR1']}"puts"VAR2:#{ENV['VAR2']}"end执行任务:VAR1=fir