crontab 定時

yy6468發表於2019-01-09

一.第一種方法

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 協議》,轉載必須註明作者和本文連結

相關文章