一.第一種方法
1.在/application/command建立要配置的PHP類檔案,需要繼承Command類,並重寫configure和execute兩個方法,例如:
<?php
namespace app\command;
use think\console\Command;
use think\console\Input;
use think\console\Output;
use think\Db;
class Test extends Command{
// 配置定時器的資訊
protected function configure() {
$this->setName('test') ->setDescription('Command Test');
}
protected function execute(Input $input, Output $output) {
// 輸出到日誌檔案
$output->writeln("TestCommand:");
// 定時器需要執行的內容
$output->writeln("end....");
}
}
2.修改application/command.php內容,加入上述的定時器內容
<?php
return [
'application\command\Test', // 加入需要cmd執行的PHP檔案
];
3.新增shell執行檔案
在專案根目錄下建立shell指令碼,例如crond.sh
#!/bin/sh
PATH=/usr/local/php/bin:/opt/someApp/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin # 將php路徑加入都臨時變數中
cd /home/wwwroot/域名/ # 進入專案的根目錄下,保證可以執行php think的命令
php think test # 執行在Test.php設定的名稱
4.使用crontab設定定時器
連線到伺服器,輸入 crontab -e,寫入:
0 0 * * * /home/wwwroot/域名/crond.sh
5.重啟crond服務
service crond restart
如果 該命令無法重啟,請使用systemctl restart crond 進行重啟
二. 第二種方法
1.新增Controller類,並編寫相對應的方法,例如:
以下是Test Controller類,還有一個簡單的test方法。
<?php
namespace app\demo\controller;
use think\Controller;
use think\Log;
class Test extends Controller
{
public function test(){
Log::error('start test crond demo.....');
Log::error('end test crond demo.....');
}
}
訪問test方法的路由:demo/test/test
2.新增shell執行檔案
在專案根目錄下建立shell指令碼,例如crond.sh
#!/bin/sh
PATH=/usr/local/php/bin:/opt/someApp/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# 1.執行 php 命令不需要到thinkphp專案的目錄下 2.index.php為入口檔案 3.第三個引數為需要執行方法的路由
php /home/wwwroot/域名/index.php demo/test/test
後面的步驟從本文第4步開始,就可以完成定時功能
文章轉自http://www.cnblogs.com/seizemiss/p/9467558...
本作品採用《CC 協議》,轉載必須註明作者和本文連結