PHP+Crontab+Flock實現定時任務

Crontab

Crontab是一個Unix/Linux系統下的常用定時執行任務

安裝Crontab

yum install vixie-cron crontabs  //vixie-cron軟件包爲cron的主程序,crontabs是用來安裝、卸載、列舉進程表格的程序

chkcofig crond on  //開機自啓動

service crond start   //啓動

添加crontab定時任務

crontab -e  //打開crontab文件,會默認以vi方式打開

格式

Minute

Hour

Dayofmonth

Month

Dayofweek

Command

註釋

分鐘

小時

日期

月份

命令

取值範圍

0-59

0-23

1-31

1-12

0-7(0和7都代表週日)

 

常用符號

符號

註釋

*

所有有效的值

,

分割開設定多個值

-

一段時間範圍

/n

隔n長時間

eg:*/3 9-17 1,15,25 * * command  //每個月的1、15、15號的9點至17點每隔3分鐘執行一次command命令

 

查看crontab定時任務

crontab -l

 

flock鎖

爲防止上次腳本沒有執行完,下個腳本重複執行可以使用flock鎖防止進程衝突

使用方法,創建crontab定時任務時,指定flock,eg:

*/1 * * * * flock -xw 10 command   //每一分鐘執行一次command,如果上次任務沒有完成等待10s後重試

 

flock常用參數:-h,--help

-s,--shared  獲取一個共享鎖  

-x,--exclusive 獲取一個獨佔鎖

-n,--nonblock 沒有立即獲得鎖,直接失敗

-w,--timeout  沒有立即獲得鎖,等待指定時間,單位爲秒

-c,--command 在shell中運行一個單獨的命令

 

命令案例詳解

命令1:(不加鎖/加鎖  絕對路徑)

* * * * * /bin/php /home/run.php >> /home/run.log 2>&1
* * * * * flock -xn /tmp/run.lock -c '/bin/php /home/run.php >> /home/run.log 2>&1'

註釋: /temp/run.lock  用於判斷文件是否已加鎖,一般命名爲: filename.lock

           /bin/php       php可執行文件的位置

          /home/run.php  要執行的php文件的具體位置,文件名爲filename.php

          >>  表示將運行php文件的輸出以追加的方式進行重定向

         /home/run.log  執行腳本產生的日誌文件的位置,一般命名爲filename.log

        (同一條命令中最好保持filename相同)

標準輸入stdin 、標準輸出stdout 、 標準錯誤stderr,對應的系統文件的文件描述符爲0、1、2 

& 等同與,2>&1 表示標準錯誤重定向到標準輸出中

命令2:(不加鎖/加鎖  相對路徑)

 * * * * * cd /home; /bin/php run.php >> ./run.log 2>&1
 * * * * * cd /home; flock -xn /tmp/run.lock -c '/bin/php run.php >> ./run.log 2>&1'

 

Crontab任務不執行

https://www.tony-yin.site/2018/10/29/Why-Crontab-Not-Work/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章