首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel-4 cron作业

Laravel-4 cron作业
EN

Stack Overflow用户
提问于 2014-01-01 15:15:17
回答 2查看 7.8K关注 0票数 4

我需要学习如何在Laravel..As中使用cron作业,我可以看到文档没有指定这个部分,我已经找到了一个教程,但它是关于Laravel-3的。你能给我一些关于如何安排每天运行一次cron作业的建议吗?有关于这个问题的教程吗?

到目前为止,我的代码如下:

JobDaemon.php:

代码语言:javascript
复制
<?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),
        );
    }

}

我使用以下命令来设置它

代码语言:javascript
复制
php artisan command:make JobDaemon

我的手工文件如下:

代码语言:javascript
复制
<?php

Artisan::add(new JobDaemon);

我从我的控制台得到以下信息..。

代码语言:javascript
复制
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)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-01 16:16:45

首先,您需要确保新命令已启动,因此如果您运行

代码语言:javascript
复制
php artisan list

“作业-守护进程”必须在命令列表中。

然后你测试它:

代码语言:javascript
复制
php artisan job-daemon

它起作用了吗?酷,现在你可以自己设置一个编辑器了:

代码语言:javascript
复制
export EDITOR=nano

用它打开crontab:

代码语言:javascript
复制
[sudo] crontab -e

将类型执行到php的正确路径:

代码语言:javascript
复制
type php

你应该得到一些东西

代码语言:javascript
复制
php is hashed (/opt/lampp/bin/php)

所以php可执行文件位于

代码语言:javascript
复制
/opt/lampp/bin/php

这将打开带有当前cron作业的编辑器,sudo是可选的打开 crontab,只需添加一行:

代码语言:javascript
复制
25 10 * * * /opt/lampp/bin/php /whatever/directory/your/site/is/artisan job-daemon

这将在每天上午10:25分运行您的命令。

每5分钟执行一次

代码语言:javascript
复制
*/5 * * * * /opt/lampp/bin/php /whatever/directory/your/site/is/artisan job-daemon

然后您将tail系统日志用于查看它的运行情况:

代码语言:javascript
复制
tail -f /var/log/syslog | grep -i cron

你应该看到

代码语言:javascript
复制
Jan  1 10:25:01 server CRON[19451]: (root) CMD (php /var/www/<siteName>/artisan job-daemon)

在您的命令中,您不能真正在屏幕上打印东西,您不会看到它们打印,所以要测试,例如,必须将一些东西保存到文件中:

代码语言:javascript
复制
public function fire()
{
    File::append('/tmp/laravel.txt', "fired\n");
    Log::info('fired');
}

然后

代码语言:javascript
复制
tail -f /tmp/laravel.txt

实时查看结果。

票数 21
EN

Stack Overflow用户

发布于 2014-01-20 03:48:38

我也有一个类似的问题,安东尼奥的回答让我得到了大部分的帮助,但不是100%。我试图从cPanel CRON页面安排作业,遇到404错误或没有错误,但也没有成功。对我来说,关键是:

  1. 在我的服务器上运行命令: php工匠列表
  2. 确保我的命令被列出来
  3. 运行下一个命令: php型
  4. 对我来说,输出是"php是散列的(/usr/local/bin/php)“
  5. 在创建CRON命令时,我必须使用限定路径。此外,由于artisan并不是全局可用的,所以您还必须使用一条限定路径来找到它可用的位置。对我来说,这是我网站的拉里威尔文件夹。最后一个问题是,我必须在实际的手工命令前加上“命令”:

最后,我可以使用以下命令通过cPanel的CRON Jobs页面调度laravel命令:

代码语言:javascript
复制
/usr/local/bin/php /home/sitename/public_html/laravel/artisan command:TotalMadnessUpdateResultsCommand

另一个常见的问题是没有将以下内容添加到artisan.php文件中:

代码语言:javascript
复制
Artisan::add(new TotalMadnessUpdateResultsCommand);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20870032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档