Laravel框架在ubuntu下的定时任务【过期订单自动关闭】

本文介绍如何在Laravel中设置定时任务,包括配置cron表达式、编写定时任务逻辑及测试方法。示例展示了如何通过命令行设置定时任务,并在Laravel应用中实现每分钟记录日志及每天处理过期订单。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文地址:https://www.sunzhongwei.com/laravel-schedule-a-task-that-is-much-more-convenient-than-linux-system-crontab

 

转载了原作者的文章并结合自己的理解有所修改。

 

Ubuntu 下,命令行输入  

crontab -e

 打开了一个文件  然后在最后加入  这技术定时器,

* * * * * php(你服务器上面php所在的位置 你的php位置/bin/php) /path-to-your-project/artisan schedule:run >> /dev/null 2>&1
 

 

然后我们重启了服务 

 service crond restart

 

下面是在laravel文件下的编写

app/Console/Kernel.php【上面的定时好了之后我们就测试了一下定时向日志中添加语句,并且是每分钟执行一次】  

protected function schedule(Schedule $schedule)
{
        $schedule->call(function () {
            Log::info('ccc');
        })->everyMinute();
}

示例,自动处理过期订单

Order.php

    public static function handle_expired_order() {
        $orders = self::where('status', self::STATUS_NEW)
            ->whereRaw("created_at < NOW() - INTERVAL 1 DAY")
            ->get();

        foreach ($orders as $order) {
            $order->status = self::STATUS_EXPIRED;
            $order->save();
        }
    }

app/Console/Kernel.php

protected function schedule(Schedule $schedule)
    {
        $schedule->call(function () {
            Order::handle_expired_order();
        })->hourly();
    }

每小时执行

->hourly();

本地调试的时候,最好改成

->everyMinute();

方便查看效果。

 

当存在两个定时任务时需要 分开写  

protected function schedule(Schedule $schedule){     

        第一个定时任务 
        $schedule->call(function () { Log::info('ccc');    })      
 

        第二个定时任务

        $schedule->call(function () { Log::info('哎哎哎');  }) 
})->everyMinute();}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值