thinkphp中使用计划任务
thinkphp中使用计划任务
一、需求
数据库有两个字段enter_time
入驻时间与status
状态,当入驻时间超过指定时间时,要求将状态设置为指定状态。
二、解决方案
方案1:使用计划任务,定时判断入驻时间是否超过指定时间。
github库:think-cron(https://github.com/yunwuxin/think-cron)
1、安装think-cron
1 | composer require yunwuxin/think-cron |
版本原因安装失败,尝试使用:
1 | composer require yunwuxin/think-cron:* |
2、创建任务类
1 |
|
新建一个目录task
,再新建一个任务类。
3、在配置文件中注册任务
4、监听任务
方法一 (推荐)
起一个常驻进程,可以配合supervisor使用
1 | php think cron:schedule |
方法二
在系统的计划任务里添加
1 | * * * * * php /path/to/think cron:run >> /dev/null 2>&1 |
补充:
1、使用以下命令,可执行一次任务。
1 | php think cron:run |
2、从源码中可以看到一共有两个命令
3、可以了解到think-cron的计划任务逻辑
如下图,每60秒执行一遍php think cron:run
,而在php think cron:run
命令中判断当前执行时的时间是否满足条件,满足则执行任务。
4、在windows环境
建议去掉Schedule.php
中execute
函数中的start /B
,否则当执行php think cron:schedule
时,到时间会弹出弹窗询问是否打开文件,如下图。