① linux下shell腳本PING命令只要延遲高於100ms就發送個郵件
#!/bin/bash第三行Timeout_limit值寫錯了,應該是100哈,代碼提交了不能改了。你這個不需要把延遲結果保存在文件的,而是應該需要作定時檢測的。
Timeout=0;
Timeout_limit=1;
Timeout_flag=0;
IP="8.8.8.8"
while [ 1 ]
do
# 取平均延遲的整數位
Timeout="`ping $IP -c 3 | grep 'min/avg/max/mdev'|awk '{print $4}'|cut -b ƍ'`"
if [ $Timeout -ge $Timeout_limit ] && [ $Timeout_flag -ne 1 ]; then
echo ping timeout, average delay=$Timeout ms
mail -s 'Ping Delay' 郵箱 < ar/log/boot.log
Timeout_flag=1
fi
if [ $Timeout -lt $Timeout_limit ] && [ $Timeout_flag -ne 0 ]; then
echo ping recovery, average delay=$Timeout ms
mail -s 'Ping recovery' 郵箱 < ar/log/boot.log
Timeout_flag=0
fi
sleep 5
done
② linux 發郵件python腳本怎麼檢查是否發送成功
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#導入smtplib和MIMEText
import smtplib,sys
from email.mime.text import MIMEText
def send_mail(sub,content):
#############
#要發給誰,這里發給1個人
mailto_list=["[email protected]"]
#####################
#設置伺服器,用戶名、口令以及郵箱的後綴
mail_host="mail.gyyx.cn"
mail_user="[email protected]"
mail_pass="123456677890"
mail_postfix="gyyx.cn"
######################
'''''
to_list:發給誰
sub:主題
content:內容
send_mail("[email protected]","sub","content")
'''
me=mail_user+"<"+mail_user+"@"+mail_postfix+">"
msg = MIMEText(content,_charset='gbk')
msg['Subject'] = sub
msg['From'] = me
msg['To'] = ";".join(mailto_list)
try:
s = smtplib.SMTP()
s.connect(mail_host)
s.login(mail_user,mail_pass)
s.sendmail(me, mailto_list, msg.as_string())
s.close()
return True
except Exception, e:
print
③ linux中群發不同郵件到不同的郵箱腳本怎麼寫
一、修改/etc/mail.rc //在最後面追加就行,也可以 echo >>
set [email protected] //你自己的真實郵箱地址
set smtp=smtp.exmail.qq.com //在郵箱設置,客戶端設置,設置方法,發送伺服器里
set [email protected] //自己郵箱真實地址
set smtp-auth-password=123456 //自己郵箱密碼
set smtp-auth=login
:wq
二、到這里已經實現實現外部郵箱發送mail了,可以命令行輸入
echo "Test Mail" | mail -s "Test" [email protected]
########################################################################
也可以寫腳本:
#!/bin/bash
user="
目標1 [email protected]
目標2 [email protected]
……
"
userlist=`echo -e "${user}" | awk 『{print $2}『`
echo $userlist
mail -v -s "測試郵件" $userlist < test.txt
:wq
其中:
-v 顯示詳細信息
-s 郵件標題
test.txt 是你要輸入郵件的內容
然後crontab -e 編輯計劃任務,就可以實現定時發送郵件啦!
④ 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 shell腳本每分鍾執行計劃任務,並把結果發送到mail,怎麼不重復發送
如果是這樣的話 建議你腳本設置一個閥值 用if判斷實現 在統計fail的類型的錯誤的時候 通過uniq和sort之類的排序去重語法 將重復次數和數值計算出來寫入郵箱的臨時文檔里 另外最好不要一分鍾一次 感覺意義不大 如果非要一分鍾一次的話 建議腳本改進 通過當前的date時間做減法 算時間和日誌里的進行比對 然後找出近一分鍾的時間內的fail的IP 寫入tmp文件中 那樣你可以用 >這樣的輸出重定向 以免每次看到都有很多重復信息。 具體的腳本寫法我就不羅列了 自己解決問題才是成長的過程。