ThinkPHP框架——實現定時任務,定時更新、清理數據

大家好,我是小蝸牛,今天給大家分享一下,如何用ThinkPHP5.1.*版本實現定時任務,

例如凌晨12點更新數據、每隔10秒檢測過期會員、每隔幾分鐘發送請求保證ip的活性等

本次分享,主要用到一個名為EasyTask的擴展。

那麼什麼是EasyTask呢?又怎麼安裝呢?

什麼是EasyTask

EasyTask是一款簡單易用的PHP常駐內存定時器,可以用它來完成重複運行的任務(如訂單超時自動取消,短信郵件異步推送,隊列/消費者/頻道訂閱者等等),甚至處理Crontab計劃任務(如每天凌晨1點-3點同步DB數據,每月1號生成月度統一報表,每晚10點重啟nginx服務器等等),工具包同時支持windows、linux、mac環境運行。與之相似的還有Workman等工具。

這裡是EasyTask的官方文檔地址:https://gitee.com/392223903/EasyTask

如何安裝EasyTask(這裡以Thinkphp框架為例)

首先進入你的thinkphp目錄下,使用composer進行安裝,使用如下指令:

composer require easy-task/easy-tas

如何使用EasyTask

關於如何使用EasyTask這個組件,需要配合thinkphp中的創建自定義指令功能。

當你安裝好EasyTask後(這裡默認你已經安裝好,如果安裝過程中出現問題,請根據代碼提示搜索解決方案)

1、在thinkphp框架中創建一個自定義命令類文件,這裡我新增的是一個名為Task.php的文件,路徑是:application/common/command/Task.php

ThinkPHP框架——實現定時任務,定時更新、清理數據

創建自定義命令類文件

2、Task.php中的代碼:

namespace app\common\command;

use think\console\Command;

use think\console\Input;

use think\console\input\Argument;

use think\console\Output;

use app\api\utils\News;

class Task extends Command

{

// 配置

protected function configure()

{

//設置名稱為task

$this->setName('task')

//增加一個命令參數,用於獲取輸入操控參數

->addArgument('action', Argument::OPTIONAL, "action")

->addArgument('force', Argument::OPTIONAL, "force");

}

// 執行邏輯

protected function execute(Input $input, Output $output)

{

//獲取輸入參數

$action = trim($input->getArgument('action'));

$force = trim($input->getArgument('force'));

// 配置任務

// 創建EasyTask對象

$task = new \EasyTask\Task();

// 設置記錄運行時目錄(日誌或緩存目錄)

$task->setRunTimePath('./runtime/viplog/');

// 設置常駐內存

$task->setDaemon(true);

// 添加類的方法類型定時任務(同時支持靜態方法)(開啟1個進程,每隔10秒執行1次)

// 還有其餘用法,歡迎查看官方文檔,根據官方文檔自定義方法

// 這裡我設置每6小時執行一下News類中的upNews方法。

$task->addClass(News::class, 'upNews','upnews' ,21600, 1);

// 根據命令執行

if ($action == 'start')

{

$task->start();

}

elseif ($action == 'status')

{

$task->status();

}

elseif ($action == 'stop')

{

$force = ($force == 'force'); //是否強制停止

$task->stop($force);

}

else

{

exit('Command is not exist');

}

}

}

3、配置application/command.php文件

return [

'app\common\command\Task',

];

4、配置完成,接下來就是啟動定時任務,讓其常駐於內存(回到根目錄運行)

// php think 定時任務名 動作

啟動任務: php think task start

查詢任務: php think task status

普通關閉: php think task stop

強制關閉: php think task stop force

Ps:由於我使用的是寶塔,會自動禁用某些關鍵函數,根據寶塔提示的禁用函數一個個解封即可。

ThinkPHP框架——實現定時任務,定時更新、清理數據

提示pcntl_fork,解封它

刪除寶塔面板中的禁用函數即可。

ThinkPHP框架——實現定時任務,定時更新、清理數據

寶塔面板,刪除禁用函數

5、運行結果圖

ThinkPHP框架——實現定時任務,定時更新、清理數據

運行成功

運行效果:

從啟動腳本的時間開始,每個6小時,自動運行指定目錄下的類中方法(通過靜態方法調用),這裡的方法可以自定義邏輯,主要是如何設定讓它隔一段時間自動運行。

總結

因為第一次使用定時任務,所以採用的是EasyTask這個包,實現定時任務還有很多的解決方案,這裡只是給大家提供一個我所使用過的定時任務解決方案。

謝謝大家的閱讀,我是小蝸牛,如果覺得對你有幫助

麻煩請點個贊,點個關注吧~Thanks♪(・ω・)ノ


分享到:


相關文章: