PHP定時任務執行處理、Crontab定時執行程式,Linux設定定時任務(教程案例)
【第一步】:先寫task.sh指令碼檔案。
【第二步】:設定Crontab定時時間,定時執行task.sh指令碼檔案
【案例一】:每月1號、15號的06:10點,定時備份網站原始碼:
【第一步】:先寫youhutong.sh指令碼檔案。
- [root@localhost ~]#
- [root@localhost ~]# touch youhutong.sh #新建名為,youhutong.sh 的指令碼檔案:
- [root@localhost ~]# chmod u+x youhutong.sh #把youhutong.sh變成可執行的指令碼檔案
-
[root@localhost ~]# ls #檢視是否新建成功【建立成功下方將會列出檔名】
- youhutong.sh
- [root@localhost ~]# vi youhutong.sh #進入VI編輯器,編輯youhutong.sh檔案
- 按I鍵進入編輯模式:然後輸入以下內容:
- # email : [email protected]
- # weburl: http://www.youhutong.com
- sdir="/www/web" #這是需要備份網站原始碼所在的目錄
-
bdir="/www/backup" #這是備份成功後的原始碼存放的目錄
- ldir="/www/logs" #這是備份成功後,記錄操作日誌的目錄
- [ ! -d $ldir] && mkdir -p $ldir #判斷日誌目錄是否有,沒有就建立
- ldir=$ldir/tasklog.log #定義操作日誌記錄檔名
- [ ! -d $bdir ] && mkdir -p $bdir #判斷備份原始碼存放目錄是否有,沒有就建立
- ft=`date +%Y%m%d%H` #定義備份原始碼後的壓縮包檔名
-
dfn=$bdir/"mysql_"${ft}.tar.gz #定義備份原始碼後的壓縮包檔名
- tar zcvf $dfn $sdir #執行備份
- echo -n "webbackup success " >> $ldir && date >> $ldir && exit 0 #成功記錄操作到日誌中
輸入完以上內容後先後按:esc鍵(切換到命令模式) ==> :wq(儲存並退出編輯) ==>回車(執行)
【第二步】:設定Crontab定時時間,定時執行task.sh指令碼檔案
- [root@localhost ~]# crontab -e #進入VI編輯器,編輯crontab
- 同樣的是按上面編輯指令碼檔案方法做:
- 寫入以下內容:
- 10 6 1,15 * * /root/youhutong.sh
- [root@localhost ~]# crontab -l #檢視當前使用者的定時任務(下面就會列出來,有我們寫入的就成功了)
- 10 6 1,15 * * /root/youhutong.sh
- 不要這個任務後,可以去編輯刪除掉也可用命令:crontab -r(這是刪除當前使用者所有的定時任務),最好還是通過編輯刪除修改
參考:https://blog.csdn.net/MyDream229/article/details/80003896
如果要linux定時任務crontab 實現如何每秒執行一次!
linux crontab 命令,最小的執行時間是一分鐘。如需要在小於一分鐘內重複執行,可以有兩個方法實現。
Cron 各項的描述
以下是 crontab 檔案的格式:
{minute} {hour} {day-of-month} {month} {day-of-week} {full-path-to-shell-script}
o minute: 區間為 0 – 59
o hour: 區間為0 – 23
o day-of-month: 區間為0 – 31
o month: 區間為1 – 12. 1 是1月. 12是12月.
o Day-of-week: 區間為0 – 7. 週日可以是0或7.
1.使用延時來實現每N秒執行
建立一個php做執行動作,非常簡單,就是把當前時間寫入log。
- file_put_contents('/home/fdipzone/php/crontab/run.log',date('Y-m- dH:i:s')."\r\n",FILE_APPEND);
crontab -e 輸入以下語句,然後:wq儲存退出。
- *****php/home/fdipzone/php/crontab/tolog.php
- *****sleep10;php/home/fdipzone/php/crontab/tolog.php
- *****sleep20;php/home/fdipzone/php/crontab/tolog.php
- *****sleep30;php/home/fdipzone/php/crontab/tolog.php
- *****sleep40;php/home/fdipzone/php/crontab/tolog.php
- *****sleep50;php/home/fdipzone/php/crontab/tolog.php
使用tail -f 檢視執行情況,可以見到log每10秒被寫入一條記錄。
- fdipzone@ubuntu:~$tail-f/home/fdipzone/php/crontab/run.log
- 2014-03-3121:47:01
- 2014-03-3121:47:11
- 2014-03-3121:47:21
- 2014-03-3121:47:31
- 2014-03-3121:47:41
- 2014-03-3121:47:51
- 2014-03-3121:48:01
原理:通過延時方法 sleep N 來實現每N秒執行。
注意:
60必須能整除間隔的秒數(沒有餘數),例如間隔的秒數是2,4,6,10,12等。
如果間隔的秒數太少,例如2秒執行一次,這樣就需要在crontab 加入60/2=30條語句。不建議使用此方法,可以使用下面介紹的第二種方法。
2.編寫shell指令碼實現推薦
crontab.sh
- step=2#間隔的秒數,不能大於60
- for((i=0;i<60;i=(i+step)));do
- $(php'/home/fdipzone/php/crontab/tolog.php')
- sleep$step
- done
- exit0
crontab -e 輸入以下語句,然後:wq 儲存退出。
- # m h dom mon dow command
- * * * * * /home/fdipzone/php/crontab/crontab.sh
使用tail -f檢視執行情況,可以見到log每2秒被寫入一條記錄。
- fdipzone@ubuntu:~/php/crontab$tail-frun.log
- 2014-03-3122:23:01
- 2014-03-3122:23:03
- 2014-03-3122:23:06
- 2014-03-3122:23:08
- 2014-03-3122:23:10
- 2014-03-3122:23:12
- 2014-03-3122:23:14
- 2014-03-3122:23:16
- 2014-03-3122:23:18
- 2014-03-3122:23:20
- 2014-03-3122:23:22
- 2014-03-3122:23:25
- 2014-03-3122:23:27
- 2014-03-3122:23:29
- 2014-03-3122:23:31
- 2014-03-3122:23:33
- 2014-03-3122:23:35
- 2014-03-3122:23:37
- 2014-03-3122:23:39
- 2014-03-3122:23:41
- 2014-03-3122:23:44
- 2014-03-3122:23:46
- 2014-03-3122:23:48
- 2014-03-3122:23:50
- 2014-03-3122:23:52
- 2014-03-3122:23:54
- 2014-03-3122:23:56
- 2014-03-3122:23:58
- 2014-03-3122:24:00
原理:在sh使用for語句實現迴圈指定秒數執行。
注意:如果60不能整除間隔的秒數,則需要調整執行的時間。例如需要每7秒執行一次,就需要找到7與60的最小公倍數,7與60的最小公倍數是420(即7分鐘)。
則crontab.sh step的值為7,迴圈結束條件i<420,crontab -e可以輸入以下語句來實現
- #mhdommondowcommand
- */7****/home/fdipzone/php/crontab/crontab.sh
參考:https://blog.csdn.net/aaroun/article/details/78892984
原文地址:https://blog.csdn.net/dabao87/article/details/82665547