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'