DreamerDreamのブログ

夢想家の夢です。〜揚げたてのモヤっとしたものをラフレシアと共に〜

RaspberryPiの起動時にローカルIPアドレスをメールで知らせる

RaspberryPiのシステムをSDカードそのままで本体だけ入れ替えて使うというときに画面を見なくても割り振られたIPアドレスが解るように現状のIPアドレスをG-mailで送信するコードを作りました。

 

僕の環境の場合、IPアドレスの混乱を避けるためにラズパイ本体でのIPアドレス指定をせずにルーター側でMACアドレス指定で固定IPを割り振っているのでラズパイ本体が変わるとIPアドレスルーターで自動で割り振られて変わってしまうのです。

f:id:DreamerDream:20180724150702p:plain

 

今まで一度モニター有りの状態で立ち上げてアドレスを確認したりルーター側から割り振りIPアドレスを確認していたのだけど面倒だ!ということで立ち上げ時にifconfigで得られる情報をメールで送るという簡単なコードを作りました。

#ip_mail.py

#!/usr/bin/python
# -*- coding: utf-8 -*-

"""
IP-address mailer
"""

import gmail
import commands

import 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送信プログラム

dreamerdream.hateblo.jp

コードの概要は

commandsでShellコマンドをリクエストしてホストネームとifconfigの内要をそのままGmailへ送っているだけ。一応システムが安定するのを30秒待つようにしています。

 

 

次に起動時に実行するようデーモン指定しておきます。

 pythonコードのデーモン化は過去記事参照。

dreamerdream.hateblo.jp

 

/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に入れ替えるという作業が容易になります。