Linux的ping腳本
⑴ linux伺服器上寫個腳本,每隔xx分鍾ping指定ip,如果不通,向指定郵箱發送郵件。
別發郵件了 直接發簡訊多好。。。
我以前練習的時候寫的,挺爛的但是能用
#!/bin/bash
#ping 2分鍾結果存入文件
#var 1.0
#LX 2009年4月6日
#help function
help()
{
cat << HELP
============= ping120s.sh help =============
ping目標地址,存入文件。 配合crontab用
USAGE:
-h 顯示幫助
-to IP ping的IP地址
-sh 檢查歷史是否有丟包
-show 檢查詳細歷史
-gz 壓縮以前的記錄,並刪除txt文件
-of dir 指定輸出文件的位置(要求絕對目錄),也可以指定文件名(不建議)
HELP
}
#簡略輸出結果的函數
shmin()
{
for fName in PING__*.txt
do
var=$(sed -n '/.*packets.*/p' $fName | sed 's/.*received,//g' | sed 's/, time.*//g')
var="$(sed -n '/2009_.*/p' $fName) ==>$var"
echo "$var"
var=""
done
}
toGz()
{
gzName=ALL_$(date +%Y年%m月%d日%k時).tar.gz
gzName=`echo "$gzName" | sed 's/ /0/g'`
tar cvfz "$gzName" *.txt
[ ! -d old ] && mkdir old
[ ! -d tmp ] && mkdir tmp
mv $gzName old/ && mv *.txt tmp/
}
############## main ###############
[ -z $1 ] && { echo "參數錯誤"; help; exit 1; }
#fileName=ping__$1__$(date +%m月%d日%k:%M)
#刪除文件名中的空格, 不刪除的話0點到10點之前都沒法記錄 日亞終於找到毛病了
#fileName=`echo "$fileName" | sed 's/ /0/g'`
#echo $fileName
TIMEOUT=30
while [ -n "$1" ]; do
case "x$1" in
x-h) help; exit 0;;
x-to)
shift
[ -z "$1" ] && { echo "參數錯誤"; help; exit 1; }
pingTo="$1"
shift
;;
x-sh) shmin; exit 0;;
x-show) clear; tail -n 3 PING__*.txt; exit 0;;
x-gz) toGz; exit 0;;
x-of)
shift
[ -z "$1" ] && { echo "參數錯誤"; help; exit 1; }
ofilename="$1"
shift
;;
*) echo "error"; help; exit 1 ;;
esac
done
#-to是必須參數,ping到那裡
[ -z "$pingTo" ] && { echo "-to 參數必選之參數"; help; exit 1; }
#判斷存數文件的中間名
if [ -z "$ofilename" ] || [ -d "$ofilename" ]; then
mfileName=$pingTo
else
mfileName=${ofilename##/*/}
fi
#生成存儲文件的名稱,如沒有sed那句過了夜裡12點0點開頭到9點都無法存儲,應為有個空格 日!
fileName=PING__"$mfileName"__$(date +%m月%d日%k:%M)
fileName=`echo "$fileName" | sed 's/ /0/g'`
#存儲的目錄判斷,默認是$PWD,主要是判斷絕對目錄開頭的/和結束的/
dirName="$PWD/"
if [ "x${ofilename%${ofilename#?}}" = "x/" ]; then
if [ -d "$ofilename" ]; then
dirName="$ofilename"
[ "x${ofilename#${ofilename%?}}" = "x/" ] || dirName="$dirName/"
elif [ -d "${ofilename%/*}" ]; then
dirName="${ofilename%/*}/"
fi
fi
#echo $fileName
#echo $dirName
echo "$(date +%Y_%m_%d__%H:%M)" > "$dirName$fileName.txt"
ping "$pingTo" -n -w "$TIMEOUT" >> "$dirName$fileName.txt"
wait
bash sms.sh "$pingTo" 2>>sms.log
exit 0
下面是發簡訊腳本 sms.sh
lx@lx-Linux:~/bash/lx/ping$ cat sms.sh
#!/bin/bash
data=$(sh ping120s_V1.sh -sh| awk -F"[% ]" '{print $3}'|tac)
data=$(echo $data | awk '{print $1,$2}')
shijian=$(date +%Y年%m月%d日%k時%M分|sed 's/ *//g')
if [ -z $1 ]
then
address=""
else
address="$1"
fi
#echo $data
#echo $shijian
#data="40 $data"
for i in $(echo $data)
do
# echo "-->$i"
if [ $i -ge 40 ]
then
# echo "$i>=40"
sms -f 手機號碼 -p 飛信密碼 -t 發送給那個手機 -m "To:$address $i% loss -- $shijian" >>sms.log
wait
echo "To:$address $i% loss -- $shijian" >>sms.log
# bash ping120s_V1.sh -gz
exit 9
else
# echo "$i<40"
:
fi
done
exit 0
⑵ 如何讓linux每隔五分鍾進行一次ping命令
1、首先打開termail命令窗口,使用命令:ping -help,如下圖所示。
⑶ linux的ping命令怎麼用
linux下ping 命令的用法。
在linux操作系統中,ping命令是常用的網路命令,它通常用來測試與目標主機的連通性。
經常會說「ping一下某機器,看是不是開著」、不能打開網頁時會說「你先ping網關地址192.168.1.1試試」。
它通過發送ICMP ECHO_REQUEST數據包到網路主機(send ICMP ECHO_REQUEST to network hosts),並顯示響應情況,這樣我們就可以根據它輸出的信息來確定目標主機是
否可訪問(但這不是絕對的)。有些伺服器為了防止通過ping探測到,通過防火牆設置了禁止ping或者在內核參數中禁止ping,這樣就不能通過ping確定該主機是否還處於
開啟狀態。
linux下的ping和windows下的ping稍有區別,linux下ping不會自動終止,需要按ctrl+c終止或者用參數-c指定要求完成的回應次數。
下面就開始學習下這個常用的linux命令吧。
1.命令格式:
ping [參數] [主機名或IP地址]
2.命令功能:
ping命令用於:確定網路和各外部主機的狀態;跟蹤和隔離硬體和軟體問題;測試、評估和管理網路。如果主機正在運行並連在網上,它就對回送信號進行響應。每個回送
信號請求包含一個網際協議(IP)和 ICMP 頭,後面緊跟一個 tim 結構,以及來填寫這個信息包的足夠的位元組。預設情況是連續發送回送信號請求直到接收到中斷信號
(Ctrl-C)。
ping 命令每秒發送一個數據報並且為每個接收到的響應列印一行輸出。ping 命令計算信號往返時間和(信息)包丟失情況的統計信息,並且在完成之後顯示一個簡要總結。
ping 命令在程序超時或當接收到 SIGINT 信號時結束。Host 參數或者是一個有效的主機名或者是網際網路地址。
3.命令參數:
-d 使用Socket的SO_DEBUG功能。
-f 極限檢測。大量且快速地送網路封包給一台機器,看它的回應。
-n 只輸出數值。
-q 不顯示任何傳送封包的信息,只顯示最後的結果。
-r 忽略普通的Routing Table,直接將數據包送到遠端主機上。通常是查看本機的網路介面是否有問題。
-R 記錄路由過程。
-v 詳細顯示指令的執行過程。
<p>-c 數目:在發送指定數目的包後停止。
-i 秒數:設定間隔幾秒送一個網路封包給一台機器,預設值是一秒送一次。
-I 網路界面:使用指定的網路界面送出數據包。
-l 前置載入:設置在送出要求信息之前,先行發出的數據包。
-p 範本樣式:設置填滿數據包的範本樣式。
-s 位元組數:指定發送的數據位元組數,預設值是56,加上8位元組的ICMP頭,一共是64ICMP數據位元組。
-t 存活數值:設置存活數值TTL的大小。
4.使用實例:
實例1:ping的通的情況
復制代碼代碼示例:
命令:
ping 192.168.120.205
輸出:
[root@localhost ~]# ping 192.168.120.205
PING 192.168.120.205 (192.168.120.205) 56(84) bytes of data.
64 bytes from 192.168.120.205: icmp_seq=1 ttl=64 time=0.720 ms
64 bytes from 192.168.120.205: icmp_seq=2 ttl=64 time=0.181 ms
64 bytes from 192.168.120.205: icmp_seq=3 ttl=64 time=0.191 ms
64 bytes from 192.168.120.205: icmp_seq=4 ttl=64 time=0.188 ms
64 bytes from 192.168.120.205: icmp_seq=5 ttl=64 time=0.189 ms
--- 192.168.120.205 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4000ms
rtt min/avg/max/mdev = 0.181/0.293/0.720/0.214 ms
[root@localhost ~]#
更多Linux知識可以參考《Linux就該這么學》
⑷ 寫個LINUX的SHELL 腳本,要求:PING 一個網站地址,把結果寫到另一個文本文件中,怎麼寫,請教,在線等
ping -c 5 www..com >ping.txt,其中通斷過程可以用grep命令從txt文件中查找並加以判斷。
⑸ 在Linux下如何基於ping的寫一個 shell腳本,完成定期測量 從本機到 某些主機的RTT信息
#!/bin/bash
while:
do
#包大小
PACKETSIZE=32
#發包數
PACKETTIMES=10
#間隔時間
INTERVAL=1
#ip列表文件位置
IPFILE=/tmp/1
#多長時間測試一次(秒)
SLEEPTIME=60
#臨時文件
TMP=/tmp/pingtmp
#輸出的ping.txt文件路徑
OUTPUT=/tmp/ping.txt
#本機IP(這都不知道自己切JJ)
HOSTIP=1.1.1.1
whilereadline
do
>${TMP}
ping-c${PACKETTIMES}-i${INTERVAL}-s${PACKETSIZE}$line>>${TMP}
DELAY=`greprtt${TMP}|awk'{print$4}'|awk-F"/"'{print$1"/"$2"/"$3}'`
LOST=`greploss${TMP}|awk-F"%"'{print$1"%"}'|awk'{print$NF}'`
DATE=`date+"%Y-%m-%d%H:%M:%S"`
if[-z"${DELAY}"]
then
DELAY=none
fi
echo"################################################">>${OUTPUT}
echo"${DATE}${HOSTIP}>${line}themin/avg/maxis${DELAY}andpacketslost${LOST}">>${OUTPUT}/ping.txt
rm-rf${TMP}
done<${IPFILE}
sleep${SLEEPTIME}
done
= =缺點是 運行時候 要加個 ./腳本 & 後台執行
⑹ linux shell腳本寫一個PING主機命令
while true
do
if [ `ping -c 1 192.168.0.2|grep 100%|wc -l` -ne 0 ];then
echo diaoxian_192.168.0.2 >>log2
fi
done
⑺ 使用ping命令對批量ip地址進行測試 用Linux shell腳本編程實現;
#!/bin/bash
for i in $(seq 151 254)
do
ping -c 1 192.168.0.$i &>/dev/null
if [ $? -eq 0 ];then
echo "Ip is up "
else
echo "ip is down"
fi
done
⑻ 我在linux下的/usr/local目錄下寫了個腳本pingtest.sh,這個腳本就一條ping ip地址命令。
你只殺了父進程,子進程還存在,只是其父進程成了init
必須把腳本及其子進程都殺掉