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/closeinvalidlive0 0 27 * * /usr/bin/wget --spider http://wan.coolxap.cn/cron/magicdistributed0 0 26 * * /usr/bin/wget --spider http://wan.coolxap.cn/cron/guildassessment0 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許可權後,待問題解決了,確定是目錄許可權不足導致指令碼無法正常啟動並執行時候,再把目錄的許可權收回來,逐步提高許可權。