【问题标题】:How to set up task scheduling in Laravel 4?如何在 Laravel 4 中设置任务调度?
【发布时间】:2015-10-14 08:25:27
【问题描述】:

我有一个使用 Laravel 4.2 制作的网站,我们拥有每月 30 积分的会员资格。即使用户没有使用所有这些,它们也应该在valid_till 日期到期。

我希望有一段代码将在每晚 12 点运行,并将 valid_till 日期等于昨天或之前的每个人的帐户中的信用设置为 0。

如果在 laravel 5.1 中可以有类似任务调度的功能,它在每天的特定时间运行一个函数,那将是完美的。
我知道 cron 可以在 Laravel 4.2 中使用命令设置,但我无法理解如何在我的情况下使用它?

【问题讨论】:

    标签: php laravel laravel-4 cron command


    【解决方案1】:

    在 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
    

    并在这个文件中用这一行设置一个 cronjob

    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,请指导我。我无法判断整个系统是否设置正确。
    • 感谢您的回答以及 Laravel 文档,我能够找出问题所在,但您的回答更多的是 Laravel 5 的回答。
    • 不行,L5的命令结构变了,这个应该能用4
    • L5 中没有像 App\Console 这样的东西。所以在Kernel.php中注册命令在L4中是不可能的,除了app\commands之外,它在L4中的artisan.php中完成是存储文件的地方,而不是 app\console\commands。还请提及在您的答案中将此 cronjob 行放在哪里,我能够弄清楚,但我又花了几次搜索。
    • @baao,你指的是哪个文件And in this file set a cronjob with this line
    猜你喜欢
    • 2020-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-20
    • 2020-11-06
    • 2021-10-22
    • 1970-01-01
    • 2021-10-09
    相关资源
    最近更新 更多