RaspberryPiのシステムをSDカードそのままで本体だけ入れ替えて使うというときに画面を見なくても割り振られたIPアドレスが解るように現状のIPアドレスをG-mailで送信するコードを作りました。
僕の環境の場合、IPアドレスの混乱を避けるためにラズパイ本体でのIPアドレス指定をせずにルーター側でMACアドレス指定で固定IPを割り振っているのでラズパイ本体が変わるとIPアドレスもルーターで自動で割り振られて変わってしまうのです。
今まで一度モニター有りの状態で立ち上げてアドレスを確認したりルーター側から割り振りIPアドレスを確認していたのだけど面倒だ!ということで立ち上げ時にifconfigで得られる情報をメールで送るという簡単なコードを作りました。
#ip_mail.py
#!/usr/bin/python
# -*- coding: utf-8 -*-"""
IP-address mailer
"""import gmail
import commandsimport time
address='<送信先のメールアドレス>'
def send(sub,body):
gmail.send(address,sub,body)def get_hostname():
return commands.getoutput('hostname')def get_ifconfig():
return commands.getoutput('ifconfig')if __name__ == '__main__':
time.sleep(30)
ifconfig = get_ifconfig()hostname = get_hostname()
send(hostname,ifconfig)
最初にimportしているのは過去に作ったGmail送信プログラム
コードの概要は
commandsでShellコマンドをリクエストしてホストネームとifconfigの内要をそのままGmailへ送っているだけ。一応システムが安定するのを30秒待つようにしています。
次に起動時に実行するようデーモン指定しておきます。
pythonコードのデーモン化は過去記事参照。
/usr/lib/systemd/system
に
ip_mail.service
を作成
[Unit]
Description=IP Address Mailer Oneshot[Service]
ExecStart=/usr/local/lib/ip_mail.py
Restart=no
Type=oneshot[Install]
WantedBy=multi-user.target
Restart=no で再起動しない
Type=oneshot でコマンド実行したら終了
と指定することで起動時に一回だけプロセスが実行されることになります。
デーモンの再読み込み
sudo systemctl daemon-reload
実行
sudo systemctl start ip_mail
ここで30秒後一度メールが送信されます。
起動時に有効化
sudo systemctl enable ip_mail
有効化が成立したかチェック
systemctl is-enabled ip_mail
enabled と返ってくれば成立しています。
再起動
sudo reboot
再起動で30秒後にメールが送られてくれば成功。
これでPi2で動いているシステムをPi3に入れ替えるという作業が容易になります。