PHP死循環來處理定時任務的效率是很低的。大家都建議使用Linux內建的定時任務crontab指令來呼叫php腳本來實作。本文主要和大家分享PHP結合Linux的cron指令實現定時任務實例,希望能幫助大家。
PHP定時任務的兩種方法:
1、web方式呼叫php網頁,但這樣有安全性問題,外部使用者同時也可以呼叫此檔案。
*/1 * * * * /usr/bin/wget -q -O temp.txt http://wan.coolxap.cn/cron
2、用php-cli 模式來呼叫php腳本,cli則是以一種命令列模式來執行php腳本
* * * * * /usr/bin/php -f /root/test.php >> test.log
使用crontab -e新增任務,在/var/spool/cron下你可以看到一個root檔案。
重啟服務,使修改生效
service crond restart
crontab最細的粒度是分鐘,但可以起多個任務+休眠來達到模擬以秒為單位的任務。
* * * * * /bin/date >> /tmp/date.txt * * * * * sleep 10; /bin/date >> /tmp/date.txt * * * * * sleep 20; /bin/date >> /tmp/date.txt * * * * * sleep 30; /bin/date >> /tmp/date.txt * * * * * sleep 40; /bin/date >> /tmp/date.txt * * * * * sleep 50; /bin/date >> /tmp/date.txt列举个真实场景:
*/1 * * * * /usr/bin/wget --spider http://wan.coolxap.cn/cron/closeinvalidlive 0 0 27 * * /usr/bin/wget --spider http://wan.coolxap.cn/cron/magicdistributed 0 0 26 * * /usr/bin/wget --spider http://wan.coolxap.cn/cron/guildassessment 0 0 27 * * /usr/bin/wget --spider http://wan.coolxap.cn/cron/guildprizestatement
當定時任務不起作用
定時任務,裡面執行php腳本。
發現不能直接執行,需要切換到www使用者來執行php腳本,
否則,腳本所做的操作都是以root 的權限來執行的,例如建立檔案目錄和下載的圖片都是屬於root用戶群組。
直接導致到的問題是,web網頁使用者由於權限不足就無法對該目錄進行操作,例如root創建的目錄,web用戶無法在該目錄上傳圖片。
解決方案如下:
切換到www使用者來執行指令
su www "-c cd /alidata/www/wwwroot/17xap/e/caidiscuz/ && /aliyun/webserver/php5.2.17/bin/php pushnews2.php -9 -u"
另外解決圖片下載時發現的一個解決問題的小技巧。
用介面的形式來存取某個php檔案時,發現下載圖片失敗,提示權限不足 無法在該目錄做圖片儲存操作。
接著檢查目錄的權限是wr-wr-wr 0666,理論上是支援目錄的讀寫。但為什麼不能做圖片下載操作呢?
因為沒有x權限就無法在該目錄下執行任何指令,包括mkdir、ls等。建立圖片不僅需要 w權限還需要x權限。
改為wrx-r-xr-x 0755權限後就能正常下載圖片。
解決問題的技巧是先給足0777權限後,待問題解決了,確定是目錄權限不足導致腳本無法正常運作的時候,再把目錄的權限收回來,逐步提高權限。
以上是PHP結合Linux的cron指令實作定時任務實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!