PHP死循環 來處理定時任務的效率是很低的。(眾多網友評價)
大家都建議使用Linux內置的定時任務crontab命令來調用php腳本來實現。
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權限后,待問題解決了,確定是目錄權限不足導致腳本無法正常運行的時候,再把目錄的權限收回來,逐步提高權限。