thinkphp5結合Workerman的定時器實現定時任務在某一時間執行

1.首先通過 composer 安裝:(根據自己的目前使用的thinkphp及支持的Workerman版本安裝合適的版本,否則會報錯)

composer require topthink/think-worker

2.在項目根目錄下創建啓動文件server.php:

<?php
 
define('APP_PATH', __DIR__ . '/application/');
define("BIND_MODULE", "server/Worker");
// 加載框架引導文件
require __DIR__ . '/thinkphp/start.php';

3.在application裏創建server模塊,並在server裏創建控制器 Worker.php如下圖:

<?php
namespace app\server\controller;
 
use think\worker\Server;
 
class Worker extends Server
{
    protected $processes=1;
    public function onWorkerStart($work)
    {
        $handle=new Index();
        $handle->add_timer();
    }
}

4.在server模塊裏創建Index.php類定義一個每秒鐘執行一次的定時器,(執行時間根據自己的業務需求來設置

<?php
namespace app\server\controller;
 
use Workerman\Lib\Timer;
 
class Index
{
    public function add_timer(){
        Timer::add(30, array($this, 'index'), array(), true);
    }
    public function index(){
        $orders=db('order')->select();//30分鐘未支付的訂單自動取消
        foreach ($orders as $k => $v) {
           db('order')->where('id',$v['id'])->setField('ispay',0);
        }
    }
}

定時器的參數說明可以去文檔裏查看http://doc.workerman.net/315179

命令行運行(windows用戶用 cmd命令行

5、啓動服務 php server.php start -d   這裏是守護進程啓動,當你退出終端的時候,進程依然在執行

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章