樹梅派應用52:讓樹莓派自動上報IP地址到郵箱

由於我使用樹莓派的場景大多數是在沒有顯示器、只用terminal連接它的情況下,所以,它的IP地址有時會在重啓之後變掉(DHCP的),導致我無法通過terminal連接上它。然後我又要很麻煩地登錄路由器的管理界面裏,去看它被分配到的新IP是什麼,然後用terminal重連,太麻煩了,不是麼?作爲一個樹莓派玩家,這種麻煩簡直是無法接受的!

爲了解決這個問題,我讓Pi開機的時候,自動向我指定的Email發送一封郵件,告訴我它此次開機時的IP地址。
步驟: 開機時執行一個腳本,檢測網絡可用性→網絡通暢後獲取自己的IP地址→發送郵件到指定的郵箱。
下面一一道來。

『1』 開機啓動項
開機執行一個腳本是怎麼做到的?
只需要向 /etc/rc.local 文件中添加一句話,即可開機執行一個腳本了:

1
2
# send a mail to notify the IP address of Pi
/root/data/source/send-ip-mail.sh >> /root/data/source/send-ip-mail.log 2>&1

『2』 上報IP地址的腳本實現
send-ip-mail.sh腳本的內容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/bin/bash
 
# check network availability
while true
do
  TIMEOUT=5
  SITE_TO_CHECK="www.126.com"
  RET_CODE=`curl -I -s --connect-timeout $TIMEOUT $SITE_TO_CHECK -w %{http_code} | tail -n1`
  if [ "x$RET_CODE" = "x200" ]; then
  echo "Network OK, will send mail..."
  break
  else
  echo "Network not ready, wait..."
  sleep 1s
  fi
done
 
# get the IP address of eth0, e.g. "192.168.16.5"
ETH0_IP_ADDR=`ifconfig eth0 | sed -n "2,2p" | awk '{print substr($2,1)}'`
 
# send the Email
echo "Current time: `date '+%F %T'`. Enjoy it" | mutt -s "IP Address of Raspberry Pi: $ETH0_IP_ADDR" [email protected]

腳本很簡單,分爲3部分:第一部分檢測網絡可用性;第二部分取樹莓派的eth0網卡的IP地址;第三部分發送郵件到指定的Email。
其中,第一部分是必須要有的,因爲經過我試驗,在本腳本執行時,樹莓派的網絡還沒有初始化好,此時你直接發郵件是發不出去的。在這裏我通過訪問www.126.com來確定網絡可用性。
第三部分需要你預先配置好mutt和msmtp。

『3』 安裝配置mutt和msmtp
配置好mutt和msmtp後,就可以像上面一樣,通過一句代碼將郵件發送出去。
首先要在Pi上安裝mutt和msmtp:

1
2
pacman -S msmtp
pacman -S mutt

安裝後,先配置msmtp。在你用戶的根目錄下創建文件 .msmtprc,內容如下:

1
2
3
4
5
6
7
account default
host smtp.126.com
auth plain
password your_password
logfile /var/log/msmtp.log

其中,smtp.126.com是我使用的郵箱的SMTP服務器地址,[email protected]是我用於發送郵件的郵箱,your_password是郵箱密碼,你要根據你的情況修改。

然後配置mutt。在你用戶的根目錄下創建文件 .muttrc,內容如下:

1
2
3
4
set sendmail="/usr/bin/msmtp"
set use_from=yes
set realname="Alarm"
set editor="vim"

其中,realname是發件人的名字,接收到的郵件中會顯示出來。

『4』 至此全部搞定,以後每次Pi開機的時候,就會“自報家門”,我們再也不愁找不到Pi啦!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章