試驗環境: ubuntu10.04
目標:實現一個開機後不用用戶登錄就自動發郵件報告ip地址的功能,主腳本放在/etc/init.d下,系統默認運行級別爲2,所以在 /etc/rc2.d/下建個S99級別的軟鏈接。 具體實現是先用ifconfig獲取系統IP信息,保存到/tmp下的一文件IPaddr,然後通過sendmail腳本讀取IPaddr文件來發送郵件。 確認腳本都正常工作。
python腳本:sendmail.py
#!/usr/bin/env python
import sys
import smtplib
from email.mime.text import MIMEText
if len(sys.argv) < 2:
print "Usage: python " + sys.argv[0] + " mail_content"
sys.exit()
###################
# read IP address #
###################
fh = open(sys.argv[1], "r")
mail_content = fh.read()
fh.close()
##############
# send email #
##############
mailto_list=["****@gmail.com"]
mail_host="***"
mail_user="***"
mail_pass="***"
mail_postfix="***"
def send_mail(to_list, sub, content):
'''
to_list: to who
sub: subject
content:
send_mail(to_list, subject, content)
'''
me = mail_user + "<" + mail_user + "@" + mail_postfix + ">"
msg = MIMEText(content)
msg['Subject'] = sub
msg['From'] = me
msg['To'] = ";".join(to_list)
try:
s = smtplib.SMTP();
s.connect(mail_host)
s.login(mail_user, mail_pass)
s.sendmail(me, to_list, msg.as_string())
s.close
return True
except Exception, e:
print str(e)
return False
if __name__ == '__main__':
if send_mail(mailto_list, "Lab. IP address", mail_content):
print "send OK!"
else:
print "sent fail!"
執行腳本:
#!/bin/sh
home="/home/user/SendIP"
log="$home/sendmail.log"
IPaddr="$home/IPaddr"
/bin/date >> $log
/sbin/ifconfig > $IPaddr
python $home/sendmail.py $IPaddr >> $log
exit 0
現在遇到以下問題:開機時IPaddr文件中並沒有分配實際的ip信息, 導致sendmail發送失敗。系統登錄後運行/etc/init.d/sendIP status 能正確運行,發送成功!想問問IP的獲取是在什麼階段運行的,不是應該在rc2.d運行就應該完成配置了嗎? 不解~
附IPaddr文件:
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Interrupt:17
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
開機自動發郵件的目的最終搞不定,降低要求,定時發就可以。 用crontab 搞定!