首先得明白,这个计划任务是靠用户每一次访问网站来触发的,所以不能用它做一些精确定时任务。但如果你只是需要系统周期性的做某件事,那还是很好用的。如果需要精确的定时任务,请使用`crontab`来做,但这与`YFCMF`系统无关,自行百度吧。 但`YFCMF`并未把它做成后台可管理的功能,只是用它做了一个定期清理日志的功能,所以我们得手动写代码。 ### 需求 假设,我们这个系统是一个`域名销售管理系统`,有很多用户在上面购买了域名。域名有效期一般是按年为单位,所以用户注册域名后时间一长,就容易忘记续费。我们要做的就是每24个小时检查一下即将到期的域名,并给域名所有者发送提醒邮件。由于这个需求不需要精确的时间为前提,所以可以使用系统的计划任务功能。 ### 编码 * 先在`/app/cron/`目录下创建一个文件`check-expire-domain.php`,在里面写我们要做的事 ~~~ <?php // 这里本应写一个发布检测域名队列任务的 // 但为了演示效果,只是向系统日志中写一条信息 trace('给域名即将到期的用户发送提醒邮件: ' . date('Y-m-d H:i:s'), 'crons'); ~~~ * 打开文件`/app/crons.php`,以数组方式添加一条计划任务 ~~~ <?php // 定时任务 '任务名'=>[任务文件名,定时执行周期,开始执行时间] return [ // // 定时清理日志 'clearlog' => ['clearlog',86400,1482606000], // 每24小时检测一下还有3个月就到期的域名 'check_expire_domain' => ['check-expire-domain', 3600*24, 1482606000], ]; ~~~ `任务名`:可以随便起,不重复就行; `任务文件名`:上面创建的那个要执行的文件名,不含后缀; `定时执行周期`:多久执行一次(秒为单位)(测试时可以把这里改下一点,比如10秒,20秒); `开始执行时间`:Unix时间戳,大于现在时间,则可以指定哪一天之后开始执行,如果小于现在时间,则立即执行。 * 手动删除`/data/runtime/~crons.php`这个计划任务缓存文件 * 我们随便访问一下网站的任何页面,然后通过后台首页里的`查看日志`可以看到计划任务否执行了 ![](https://box.kancloud.cn/c3e5a74a7432a897209f26ea7104d87c_755x180.png)