1. 程式人生 > 實用技巧 >PHP定時任務執行處理、Crontab定時執行程式,Linux設定定時任務(教程案例)

PHP定時任務執行處理、Crontab定時執行程式,Linux設定定時任務(教程案例)

【第一步】:先寫task.sh指令碼檔案。

【第二步】:設定Crontab定時時間,定時執行task.sh指令碼檔案

【案例一】:每月1號、15號的06:10點,定時備份網站原始碼:

【第一步】:先寫youhutong.sh指令碼檔案。

  1. [root@localhost ~]#
  2. [root@localhost ~]# touch youhutong.sh #新建名為,youhutong.sh 的指令碼檔案:
  3. [root@localhost ~]# chmod u+x youhutong.sh #把youhutong.sh變成可執行的指令碼檔案
  4. [root@localhost ~]# ls #檢視是否新建成功【建立成功下方將會列出檔名】
  5. youhutong.sh
  6. [root@localhost ~]# vi youhutong.sh #進入VI編輯器,編輯youhutong.sh檔案
  7. I鍵進入編輯模式:然後輸入以下內容:
  1. #!/bin/bash
  2. # email : [email protected]
  3. # weburl: http://www.youhutong.com
  4. sdir="/www/web" #這是需要備份網站原始碼所在的目錄
  5. bdir="/www/backup" #這是備份成功後的原始碼存放的目錄
  6. ldir="/www/logs" #這是備份成功後,記錄操作日誌的目錄
  7. [ ! -d $ldir] && mkdir -p $ldir #判斷日誌目錄是否有,沒有就建立
  8. ldir=$ldir/tasklog.log #定義操作日誌記錄檔名
  9. [ ! -d $bdir ] && mkdir -p $bdir #判斷備份原始碼存放目錄是否有,沒有就建立
  10. ft=`date +%Y%m%d%H` #定義備份原始碼後的壓縮包檔名
  11. dfn=$bdir/"mysql_"${ft}.tar.gz #定義備份原始碼後的壓縮包檔名
  12. tar zcvf $dfn $sdir #執行備份
  13. echo -n "webbackup success " >> $ldir && date >> $ldir && exit 0 #成功記錄操作到日誌中
輸入完以上內容後先後按:esc鍵(切換到命令模式) ==> :wq(儲存並退出編輯) ==>回車(執行)

【第二步】:設定Crontab定時時間,定時執行task.sh指令碼檔案

  1. [root@localhost ~]# crontab -e #進入VI編輯器,編輯crontab
  2. 同樣的是按上面編輯指令碼檔案方法做:
  3. 寫入以下內容:
  4. 10 6 1,15 * * /root/youhutong.sh
  5. [root@localhost ~]# crontab -l #檢視當前使用者的定時任務(下面就會列出來,有我們寫入的就成功了)
  6. 10 6 1,15 * * /root/youhutong.sh
  7. 不要這個任務後,可以去編輯刪除掉也可用命令: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。

  1. <?php
  2. file_put_contents('/home/fdipzone/php/crontab/run.log',date('Y-m- dH:i:s')."\r\n",FILE_APPEND);
  3. ?>

crontab -e 輸入以下語句,然後:wq儲存退出。

  1. *****php/home/fdipzone/php/crontab/tolog.php
  2. *****sleep10;php/home/fdipzone/php/crontab/tolog.php
  3. *****sleep20;php/home/fdipzone/php/crontab/tolog.php
  4. *****sleep30;php/home/fdipzone/php/crontab/tolog.php
  5. *****sleep40;php/home/fdipzone/php/crontab/tolog.php
  6. *****sleep50;php/home/fdipzone/php/crontab/tolog.php

使用tail -f 檢視執行情況,可以見到log每10秒被寫入一條記錄。

  1. fdipzone@ubuntu:~$tail-f/home/fdipzone/php/crontab/run.log
  2. 2014-03-3121:47:01
  3. 2014-03-3121:47:11
  4. 2014-03-3121:47:21
  5. 2014-03-3121:47:31
  6. 2014-03-3121:47:41
  7. 2014-03-3121:47:51
  8. 2014-03-3121:48:01

原理:通過延時方法 sleep N 來實現每N秒執行。

注意:

60必須能整除間隔的秒數(沒有餘數),例如間隔的秒數是2,4,6,10,12等。

如果間隔的秒數太少,例如2秒執行一次,這樣就需要在crontab 加入60/2=30條語句。不建議使用此方法,可以使用下面介紹的第二種方法。

2.編寫shell指令碼實現推薦

crontab.sh

  1. #!/bin/bash
  2. step=2#間隔的秒數,不能大於60
  3. for((i=0;i<60;i=(i+step)));do
  4. $(php'/home/fdipzone/php/crontab/tolog.php')
  5. sleep$step
  6. done
  7. exit0

crontab -e 輸入以下語句,然後:wq 儲存退出。

  1. # m h dom mon dow command
  2. * * * * * /home/fdipzone/php/crontab/crontab.sh

使用tail -f檢視執行情況,可以見到log每2秒被寫入一條記錄。

  1. fdipzone@ubuntu:~/php/crontab$tail-frun.log
  2. 2014-03-3122:23:01
  3. 2014-03-3122:23:03
  4. 2014-03-3122:23:06
  5. 2014-03-3122:23:08
  6. 2014-03-3122:23:10
  7. 2014-03-3122:23:12
  8. 2014-03-3122:23:14
  9. 2014-03-3122:23:16
  10. 2014-03-3122:23:18
  11. 2014-03-3122:23:20
  12. 2014-03-3122:23:22
  13. 2014-03-3122:23:25
  14. 2014-03-3122:23:27
  15. 2014-03-3122:23:29
  16. 2014-03-3122:23:31
  17. 2014-03-3122:23:33
  18. 2014-03-3122:23:35
  19. 2014-03-3122:23:37
  20. 2014-03-3122:23:39
  21. 2014-03-3122:23:41
  22. 2014-03-3122:23:44
  23. 2014-03-3122:23:46
  24. 2014-03-3122:23:48
  25. 2014-03-3122:23:50
  26. 2014-03-3122:23:52
  27. 2014-03-3122:23:54
  28. 2014-03-3122:23:56
  29. 2014-03-3122:23:58
  30. 2014-03-3122:24:00

原理:在sh使用for語句實現迴圈指定秒數執行。

注意:如果60不能整除間隔的秒數,則需要調整執行的時間。例如需要每7秒執行一次,就需要找到7與60的最小公倍數,7與60的最小公倍數是420(即7分鐘)。

則crontab.sh step的值為7,迴圈結束條件i<420,crontab -e可以輸入以下語句來實現

  1. #mhdommondowcommand
  2. */7****/home/fdipzone/php/crontab/crontab.sh

參考:https://blog.csdn.net/aaroun/article/details/78892984

原文地址:https://blog.csdn.net/dabao87/article/details/82665547