Laravel定时任务操作数据库

因为项目中有个几十万条记录的表,而且每天都在增加,所以想到了使用laravel定时任务,在凌晨的时候把这张表的数据转移到别的表中.

服务器中设置启动定时任务的条目

使用Xshell或者其他的SSH工具登录服务器之后
通过 crontab -e 新增或编辑Cron条目
通过 crontab -l 查看已存在的Cron条目
laravel5的Kernel/schedule 共用一个Cron条目

Cron条目模板和示例

* * * * * php /项目地址/artisan schedule:run >> /dev/null 2>&1
* * * * * php /website/lanchogn_test/artisan schedule:run >> /root/website_lanchong.log 2>&1

在App/console/Kernel类的schedule方法里设置定时任务的路径和执行时间

可以是这种直接操作数据表的.

    protected function schedule(Schedule $schedule)
    {
        $schedule->call(function () {
            DB::table('recent_users')->delete();
        })->daily();
    }

也可以引入在别的地方写好的方法:

protected function schedule(Schedule $schedule)
    {
        //转移过期数据;
        $schedule->call(function(){
            $reports = new Reports();
            $reports->transferData();
        })->everyTenMinutes()->between('2:00','4:00');
    }

别忘了把引入的类use一下 use App\common\Reports;

在use的那个类的方法里写需要做的事情

示例:

    //定时执行转移一个月之前的数据(每天执行一次)
    public function transferData()
    {
        set_time_limit(200);
        DB::beginTransaction();//开启事务;
        try {
            //1.转移
            $mothTime = date("Y-m-d H:i:s", strtotime("-1 month"));
            while (true) { 
                $row_one = DB::table('xxxxxx')->where('release_date', '<', $mothTime)->first();
                if ($row_one) {
                    $row_one = (array)$row_one;
                    $aaa = $row_one['message_id'];

                    $row_two = DB::table('yyyyyy')->insert($row_one);//转移
                    $row_three = DB::table('jmcm_messages')->where('message_id', $aaa)->delete();//删除
                    if ($row_two && $row_three) {
                        DB::commit();
                    } else {
                        DB::rollBack();
                        break;
                    }
                }else {
                    break;
                }
            }
        }catch (\Exception $e){

            DB::rollBack();
        }
    }

一些常用的选项

方法描述
->cron(’* * * * *’);在自定义Cron调度上运行任务
->everyMinute();每分钟运行一次任务
->everyFiveMinutes();每五分钟运行一次任务
->everyTenMinutes();每十分钟运行一次任务
->everyFifteenMinutes();每十五分钟运行一次任务
->everyThirtyMinutes();每三十分钟运行一次任务
->hourly();每小时运行一次任务
->hourlyAt(17);每小时第十七分钟运行一次任务
->daily();每天凌晨零点运行任务
->dailyAt(‘13:00’);每天13:00运行任务
->twiceDaily(1, 13);每天1:00 & 13:00运行任务
->weekly();每周运行一次任务
->monthly();每月运行一次任务
->monthlyOn(4, ‘15:00’);每月4号15:00运行一次任务
->quarterly();每个季度运行一次
->yearly();每年运行一次
->timezone(‘America/New_York’);设置时区

灵活使用


$schedule->call(function(){
      	 //每天凌晨两点到四点 每十分钟执行一次...
        })->everyTenMinutes()->between('2:00','4:00');

$schedule->call(function () {
    // 每周星期一13:00运行一次...
})->weekly()->mondays()->at('13:00');


// 工作日的上午8点到下午5点每小时运行...
$schedule->command('foo')
         ->weekdays()
         ->hourly()
         ->timezone('America/Chicago')
         ->between('8:00', '17:00');

额外的调度约束列表

方法描述
->weekdays();只在工作日运行任务
->sundays();每个星期天运行任务
->mondays();每个星期一运行任务
->tuesdays();每个星期二运行任务
->wednesdays();每个星期三运行任务
->thursdays();每个星期四运行任务
>fridays();每个星期五运行任务
->saturdays();每个星期六运行任务
->between($start, $end);基于特定时间段运行任务
->when(Closure);基于特定测试运行任务
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值