對crontab的一些新認識

有時候,將腳本加到crontab中時需要添加相關的系統變量。如下爲我最近發生的一個例子。

機房中的一些服務器並沒有設置外網,但是可以通過***方式被訪問到;因此如果想監控機房的這些服務器,在監控機上需要撥***,但是監控機所在的網絡環境不穩定,那麼就需要一個腳本來監測***連接。

看下我的腳本吧

 # crontab -l
 */1 * * * * /usr/local/bin/pptpdmo.sh > /dev/null 2>&1

開始的腳本內容如下

  1. #!/bin/bash  
  2. testip="192.168.0.12" 
  3. ***ip="10.10.10.10" 
  4. username="name" 
  5. password="pass" 
  6. ping -c4 $testip;  
  7. if [ "$?" -eq "1" ];then 
  8. killall pppd  
  9. /usr/sbin/pptpsetup --create monitor*** --server $***ip --username $username --password $password --encrypt -start  
  10. /sbin/route add -net 192.168.0.0 netmask 255.255.255.0 dev ppp0;  
  11. echo ok!;  
  12. else 
  13. echo  "do nothing!";  
  14. fi 

這個腳本手動執行可以正常執行,但是有一天監控機的外網出問題了,導致***撥號也失敗了,等外網恢復過來後,報警仍然不斷!手動執行該腳本***撥上了,這就非常的奇怪了爲何在crontab計劃中不能被正常執行。後來經過研究原來是需要加個系統變量,更改後的腳本如下,注意紅字部分

  1. #!/bin/bash    
  2. PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin  
  3. testip="192.168.0.12"   
  4. ***ip="10.10.10.10"   
  5. username="name"   
  6. password="pass"   
  7. ping -c4 $testip;    
  8. if [ "$?" -eq "1" ];then   
  9. killall pppd    
  10. /usr/sbin/pptpsetup --create monitor*** --server $***ip --username $username --password $password --encrypt -start    
  11. /sbin/route add -net 192.168.0.0 netmask 255.255.255.0 dev ppp0;    
  12. echo ok!;    
  13. else   
  14. echo  "do nothing!";    
  15. fi  

另外,在研究此問題的過程中發現了另一個和crontab有關的東東 - “shell腳本實現每秒執行一次任務”

參考,http://www.gaojinbo.com/shell%E8%84%9A%E6%9C%AC%E5%AE%9E%E7%8E%B0%E6%AF%8F%E7%A7%92%E6%89%A7%E8%A1%8C%E4%B8%80%E6%AC%A1%E4%BB%BB%E5%8A%A1.html

原理是腳本中加“循環語句”和“/bin/sleep 1”
 

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