PHP結合Linux的cron指令實作定時任務實例

小云云
發布: 2023-03-21 20:46:01
原創
1965 人瀏覽過

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中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板