linux腳本發郵件
請問各位linux高玩,我想顯示並判斷abc這個文件目錄中文件,當這個目錄中的文件個數超過4個以後就發送一個email到指定的地址,如果4個以下則不發送,請問這個腳本應該怎樣寫呢?我一般用的mutt來發送郵件的。。 謝謝
B. 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
C. linux shell腳本每分鍾執行計劃任務,並把結果發送到mail,怎麼不重復發送
如果是這樣的話 建議你腳本設置一個閥值 用if判斷實現 在統計fail的類型的錯誤的時候 通過uniq和sort之類的排序去重語法 將重復次數和數值計算出來寫入郵箱的臨時文檔里 另外最好不要一分鍾一次 感覺意義不大 如果非要一分鍾一次的話 建議腳本改進 通過當前的date時間做減法 算時間和日誌里的進行比對 然後找出近一分鍾的時間內的fail的IP 寫入tmp文件中 那樣你可以用 >這樣的輸出重定向 以免每次看到都有很多重復信息。 具體的腳本寫法我就不羅列了 自己解決問題才是成長的過程。
D. 有人會使用linux腳本發送郵件嗎
1、編輯用戶Home目錄下的.muttrc文件,設置發信環境。
復制代碼代碼如下:
# cat /root/.muttrc
set envelope_from=yes
set [email protected]
set realname="Owinux"
set use_from=yes
set rfc2047_parameters=yes
set charset="utf-8"
2、發信腳本
復制代碼代碼如下:
# cat automail.sh
#!/bin/sh
# automail.sh
DIR=/root/owinux
mailcontent=$DIR/mailcontent
> "$mailcontent"
echo -e "owinux,您好!\n" >> $mailcontent
echo -e "\t附件為 `date +%Y-%m-%d` 設備日檢報告,敬請查收。" >> $mailcontent
cat mailcontent | /usr/bin/mutt -s "設備日檢報告" -a /root/owinux/report.xls [email protected] -c [email protected] -c [email protected]
3、簡要說明:
-s:指定主題
-a:附件
-c:抄送,需要抄送多人的話,須使用多個 -c 選項
使用上面的發信環境可以保證在頁面查看郵件的時候,附件名不出現亂碼。
其中 .muttrc 的 "set from"可以隨便設置,可以是不存在的郵箱地址,當然正確的最好。
比如:
復制代碼代碼如下:
set [email protected]
不過也並不是你設置的正確的郵箱地址就一定能發送成功。
復制代碼代碼如下:
set [email protected]
我新注冊了一個 [email protected],然後將 set from 設置為[email protected],就沒有成功。
原因在於126郵箱報了 550 MI:SPF 錯誤,連接到126 企業退信的常見問題? 發現
復制代碼代碼如下:
550 MI:SPF 發信IP未被發送域的SPF許可。
E. Linux crontab定時腳本 調用mail命令發送郵件
你把shell的內容和crontab的內容復制出來看一下。
F. 要用shell腳本實現發郵件的需求,要發給多人,前台會把所有的郵件地址傳給我,我怎麼給所有地址發出去
如果你要向外部發郵件,通常需要配置你的sendmail或者使用更加強大的Postfix建立郵件伺服器,然後用郵件客戶端向外發送郵件。
而shell只是一個執行腳本,通過這個腳本可以實現自動發送的目的,但是解決不了你發郵件的需求。
如果有多個人,可以使用循環來寫。如果你對linux不懂的話,最好盡量少使用腳本。喜歡DU啪啦君,就採納一下吧!
G. linux下使用perl腳本通過139郵箱發送郵件之後,手機無法登錄139郵箱
修改密碼就是了,perl腳本也要修改一下,模擬瀏覽器登錄。
H. 如何使用linux shell發送Email郵件
方法很多呀,mail命令就可以實現,這個命令在很多包里都有,例如sendmail
I. 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
J. 求一個linux腳本:看磁碟使用情況,超過85%的自動報警發入到指定郵箱,並做成計劃任務
#!/bin/sh
ip=192.168.1.1; #你的真實IP地址
time=`date +%F-%H:%M`;
mail_address="你的郵件地址";
tmpfile=/tmp/check-disk.txt
a=`df -h | grep 'sda1'|awk '{print int($5)}'`; #指定過濾的硬碟分區
touch /tmp/check-disk.txt
echo "From :$ip" > $tmpfile #這里用「>」的意思是覆蓋,保證每次發郵件的內容都是新的。
echo "DateTime:$time" >> $tmpfile
echo "Info :yourname" >> $tmpfile
echo "disk_status_use=$a%" >> $tmpfile
if [[ "$a" > 85 ]]; then #指定分區的磁碟使用空間大於85%就報警
/bin/mail -s "warning ! $HOSTNAME disk is full !" $mail_address < $tmpfile
else
/bin/mail -s "$HOSTNAME disk is ok !" $mail_address < $tmpfile
fi
