tp5.1 php計劃任務crontab
tp5.1中的php 計劃任務的實現,本質上可以分為兩種第一種封裝在框架內部,在crontab -e中只要新增一條,然後在框架內去擴充套件內容就好了(Laravel的schedule
,任務排程),這種自由度比較高,也比較方便。第二種:建立好PHP的執行指令碼,在crontab中執行指令碼,或者再寫一個.sh 在crontab中執行,這種就需要在伺服器上去執行一些檔案,相對而言,比較麻煩,當然效果還是一樣的。
方法1.建立一個php指令碼,1.php,建立一個test.sh ,賦予許可權 chmod + x test.sh ,其中有個注意點 當時我去執行cd 命令的時候直接報錯了,後來原因找到了,是由於你寫*.sh的檔案 是在windows ,然後在上傳到liunx 伺服器. windows 的編碼格式是docs 而liunx 只能是unix. 解決辦法:1. vi test.sh 檔案 2.通過 :set ff 你會發現該檔案的格式fomat=docs 3. 通過 :set ff=unix 然後 :x或:wq 儲存並退出。
#!/bin/bash
# cd /data/wwwroot/default
/usr/bin/php /data/wwwroot/default/1.php
最後在crontab中,一分鐘執行一次,輸出到log中去,查驗效果就可以了。簡單自測的方法 直接在test.sh 所在目錄直接./test.sh或者是sh test.sh 就可以檢視指令碼執行結果了
*/1 * * * * sh /data/wwwroot/default/test.sh 2 >>/data/wwwroot/default/log.txt
方法2.利用tp自帶的think自定義command 功能,在application/模組/新建一個command資料夾/Crontab.class.php,其中的class可以省略,假如在配置的app.php中關閉了class_suffix,修改檔名為Crontab.php
<?php namespace app\api\command; use think\console\Command; use think\console\Input; use think\console\Output; class Crontab extends Command { protected function configure(){ $this->setName('Crontab')->setDescription("計劃任務 Crontab"); } protected function execute(Input $input, Output $output){ $output->writeln('Date Crontab job start...'); /*** 這裡寫計劃任務列表集 START ***/ $this->test(); /*** 這裡寫計劃任務列表集 END ***/ $output->writeln('Date Crontab job end...'); } private function test(){ echo "test\r\n"; } }
配置command.php檔案,位置在application/command.php
return ['app\api\command\Crontab'];
開啟命令列,執行php think Test命令test命令execute方法中執行的方法就會執行。剩下來的就是寫一個Crontab.sh來執行,注意格式
#!/bin/bash
cd /data/wwwroot/default/purenfort-api
/usr/bin/php think Crontab
最後在crontab中,一分鐘執行一次,輸出到log中去,查驗效果就可以了簡單自測的方法直接在Crontab.sh所在目錄直接 ./Crontab.sh或者是sh Crontab.sh 就可以檢視指令碼執行結果了 。注意php在shell指令碼中要寫全路徑,注意.sh指令碼許可權、編碼格式問題。其他就沒啥了。