Linux crontab 實現秒級定時任務

1   crontab 的延時: 原理:經過延時方法 sleep N  來實現每N秒執行。php

crontab -e 輸入如下語句,而後 :wq 保存退出。shell

* * * * * /usr/bin/curl http://www.test.com
* * * * * sleep 5; /usr/bin/curl http://www.test.com
* * * * * sleep 10; /usr/bin/curl http://www.test.com
* * * * * sleep 15; /usr/bin/curl http://www.test.com
* * * * * sleep 20; /usr/bin/curl http://www.test.com
* * * * * sleep 25; /usr/bin/curl http://www.test.com
* * * * * sleep 30; /usr/bin/curl http://www.test.com
* * * * * sleep 35; /usr/bin/curl http://www.test.com
* * * * * sleep 40; /usr/bin/curl http://www.test.com
* * * * * sleep 45; /usr/bin/curl http://www.test.com
* * * * * sleep 50; /usr/bin/curl http://www.test.com
* * * * * sleep 55; /usr/bin/curl http://www.test.com

 

注意:ubuntu

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

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

 

2 shell 腳本實現curl

crontab.sh學習

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

crontab -e 輸入如下語句,而後:wq 保存退出。url

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

使用如下命令查看結果spa

fdipzone@ubuntu:~/php/crontab$ tail -f run.log  

原理:在sh使用for語句實現循環指定秒數執行。code

 

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

則 crontab.sh step的值爲7,循環結束條件i<420, crontab -e能夠輸入如下語句來實現

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

參考網上,僅供學習交流  

 歡迎交流反饋

相關文章
相關標籤/搜索