有時候,將腳本加到crontab中時需要添加相關的系統變量。如下爲我最近發生的一個例子。
機房中的一些服務器並沒有設置外網,但是可以通過***方式被訪問到;因此如果想監控機房的這些服務器,在監控機上需要撥***,但是監控機所在的網絡環境不穩定,那麼就需要一個腳本來監測***連接。
看下我的腳本吧
# crontab -l */1 * * * * /usr/local/bin/pptpdmo.sh > /dev/null 2>&1 |
開始的腳本內容如下
- #!/bin/bash
- testip="192.168.0.12"
- ***ip="10.10.10.10"
- username="name"
- password="pass"
- ping -c4 $testip;
- if [ "$?" -eq "1" ];then
- killall pppd
- /usr/sbin/pptpsetup --create monitor*** --server $***ip --username $username --password $password --encrypt -start
- /sbin/route add -net 192.168.0.0 netmask 255.255.255.0 dev ppp0;
- echo ok!;
- else
- echo "do nothing!";
- fi
這個腳本手動執行可以正常執行,但是有一天監控機的外網出問題了,導致***撥號也失敗了,等外網恢復過來後,報警仍然不斷!手動執行該腳本***撥上了,這就非常的奇怪了爲何在crontab計劃中不能被正常執行。後來經過研究原來是需要加個系統變量,更改後的腳本如下,注意紅字部分
- #!/bin/bash
- PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
- testip="192.168.0.12"
- ***ip="10.10.10.10"
- username="name"
- password="pass"
- ping -c4 $testip;
- if [ "$?" -eq "1" ];then
- killall pppd
- /usr/sbin/pptpsetup --create monitor*** --server $***ip --username $username --password $password --encrypt -start
- /sbin/route add -net 192.168.0.0 netmask 255.255.255.0 dev ppp0;
- echo ok!;
- else
- echo "do nothing!";
- fi
另外,在研究此問題的過程中發現了另一個和crontab有關的東東 - “shell腳本實現每秒執行一次任務”
原理是腳本中加“循環語句”和“/bin/sleep 1”