目前碰到一個問題需要在大半夜的時候來執行一次數據庫統計操作。我總不可能大半夜離開溫暖的被窩來做這個吧,網上查了很多都說是用任務計劃來做。
1:先說流程
原理就是在Windows服務器上新增一個定時任務,設置什麼時候執行,執行什麼文件(這裏是一個批處理文件)。批處理文件裏面的內容是使用php.exe來執行一個寫好的PHP文件。PHP文件可以用curl來執行一個遠程文件也行,也可以直接就是要跑的文件。
2:走起
先在服務器上新建一個定時計劃 控制面板->任務計劃->創建任務
名稱什麼的自己去填
然後創建一個觸發器,這個地方是規定什麼時候來運行
在創建一個操作,這個是用於指定需要定是計劃需要執行的操作
到這裏差不多計劃任務已經差不多創建好了下面就開始來寫我們的批處理腳本了,就是上圖紅圈的那個地方。
這是我寫的,通過我的php.exe 來執行一個本地的php文件,有些到這裏就可以結束了。具體要執行的裏面的邏輯我就不寫了,沒意思啊。
windows 上面的到這裏差不多就跑通了,以後有時間來補上Linux的。
20190415 補上Linux版本的處理定時任務的方法
一般情況下我們有兩種方式來執行php方法,一種是直接有php-cli模式,另外一種是通常我們寫接口一樣的通過php-fpm來訪問。
上面的windows版本使用的是php-cli模式,我們現在來使用遠程調用接口的方式訪問接口。
1:linux需要的兩個命令 crontab、curl
corntab作爲一個觸發器實現定時觸發某個任務的功能;curl是一個遠程訪問url的命令。
corntab使用方法:https://blog.csdn.net/bsf5521/article/details/76522222
curl使用方法:https://www.cnblogs.com/duhuo/p/5695256.html
2:創建一個shell供crontab調用
vim test.sh
a進入編輯模式輸入
#!/bin/bash
curl "http://domain/leesing/public/index.php?s=test/execSpider" >/dev/null 2>&1
然後esc鍵輸入:wq保存
給這個文件添加執行權限
chmod +x test.sh
3:將需要執行的腳本添加到crontab
①:將crontab先備份
crontab -l > crontab.bak
②:修改crontab
crontab -e
③:將我們的shell腳本添加到crontab
*/1 * * * * /data/myshell/test.sh > /dev/null 2>&1 &
這個編輯模式和之前使用vim是一樣的,這裏是每分鐘執行一次,可以根據需求不同進行修改。
④:命令行顯示crontab: installing new crontab
⑤:查看執行結果,這個時候去看nginx的日誌,php的日誌都行。如果nginx都沒有打印日誌那有可能是crontab出問題了沒有觸發。這個時候看下crontab的日誌,tail -n10 /var/log/cron|grep test.sh進行問題排查。
如果有什麼問題歡迎大家一起交流 qq:746160516