首頁>技術>

大家好,我是小蝸牛,今天給大家分享一下,如何用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

2、Task.php中的程式碼:

<?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檔案

<?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:由於我使用的是寶塔,會自動禁用某些關鍵函式,根據寶塔提示的禁用函式一個個解封即可。

寶塔面板,刪除禁用函式

5、執行結果圖

執行效果:

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

總結

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

344

PHP

Linux

最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 已經絕版的python入門高清電子版,太全面了,已跪(開放下載)