最近使用swoft2.0以上版本开发php定时任务功能,询问swoft官方,答复说2.0以上版本的定时任务功能还在开发中,所以就使用swoole原始定时任务功能了。

1、使用方法:

//每隔5分钟(1分钟=60000毫秒)触发一次

swoole_timer_tick(300000, function () {

        //需要定时执行的任务代码。

    echo '5分钟执行一次!\n';

});

2、代码如下:

//每隔5分钟(1分钟=60000毫秒)触发一次
swoole_timer_tick(300000, function () {
$Dahua = new Dahua();
$cursor = '';
$sql = "select `cursor`,`lastTime` from device_request_data order by lastTime desc";
$info = DB::selectOne($sql);

if ($info) {
$cursor = $info['cursor'];
$begintime = $info['lastTime'];
} else {
$begintime = date('Ymd\THis\Z', strtotime("-1 year"));// strtotime($lastTime."-1 year") hour小时;minute分钟;year年;month月;day日
}
$endtime = date('Ymd\THis\Z');

//获取第一页数据
$limit = 100;
$firstResult = $Dahua->device($limit, $cursor, $begintime, $endtime);
if ($firstResult) {
if ($firstResult > $limit) {
$countPage = ceil($firstResult / $limit);
for ($i = 1; $i <= $countPage; $i++) {
$sql = "select `cursor` from device_request_data WHERE lastTime = ? order by orderId desc";
$info2 = DB::selectOne($sql, [$endtime]);
if ($info2) {
$cursor = $info2['cursor'];
$Dahua->device($limit, $cursor, $begintime, $endtime, $i);
}
}
}
}
//删除分页产生的多余查询记录数据
DB::delete('DELETE FROM `device_request_data` where `orderId` > ? ', ['0']);
echo '5分钟执行一次!\n';
});