由於我使用樹莓派的場景大多數是在沒有顯示器、只用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 from [email protected] auth plain user [email protected] 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啦!