有时候,将脚本加到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”