如何在Laravel 4中设置任务调度?

3
我有一个基于Laravel 4.2的网站,我们提供每月30个积分的会员服务。即使用户没有使用所有的积分,它们也应在valid_till日期到期。

我需要一段代码,在每天晚上12点运行,将所有valid_till日期为昨天或之前的账户的积分设置为0。

如果有像Laravel 5.1中的任务调度这样的东西,每天定时运行一个特定的函数,那就太完美了。
我知道可以在Laravel 4.2中设置cron,使用命令,但我不知道如何在我的情况下使用它?

1个回答

4
在app/commands中创建一个如下所示的文件,将fire方法中的我的注释替换为您的更新函数。
<?php

use Illuminate\Console\Command;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputArgument;

class setCreditToZero extends Command {

    /**
     * The console command name.
     *
     * @var string
     */
    protected $name = 'set:zero';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Command description.';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function fire()
    {
        // your update function here
    }

    /**
     * Get the console command arguments.
     *
     * @return array
     */
    protected function getArguments()
    {
        return [

        ];
    }

    /**
     * Get the console command options.
     *
     * @return array
     */
    protected function getOptions()
    {
        return [

        ];
    }

}

在app/start/artisan.php中注册您的命令

Artisan::add(new setCreditToZero);

现在在终端上使用命令设置一个cronjob。
crontab -e

在这个文件中添加以下代码设置定时任务

0 0 * * * /usr/bin/php /path/to/laravel/baseDir/artisan set:zero

你只需要按照要求进行操作,就能轻松完成。


先生,我在 Laravel 4 中找不到 Console 文件夹。我认为它是在 Laravel 5 之后才出现的。我已经将此文件放在 app/commands 中。我已经在 app/start/artisan.php 中注册了命令,如下所示:Artisan::add(new setCreditToZero); 我使用命令 crontab -e 添加了这个 cronjob 行。请指导我是否已正确设置 cronjob。我无法判断整个系统是否已正确设置。 - Abhishek Bhatia
谢谢您的回答,结合 Laravel 文档,我能够找出问题所在,但是您的回答更适用于 Laravel 5。 - Abhishek Bhatia
不,L5中的命令结构已经改变,这个应该适用于4。 - baao
2
在L5中没有像App\Console这样的东西。因此,在L4中无法在_Kernel.php_中注册命令,而是在L4中在_artisan.php_中完成,除此之外,app\commands是存储文件的位置,而不是app\console\commands。请在您的答案中提及将此cronjob行放置在何处,我能够找到它,但需要进行更多搜索。 - Abhishek Bhatia
@baao,你是指哪个文件中的 And in this file set a cronjob with this line - VijayRana
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接