gologiusの巣

プログラミングなどの技術メモです。誰かの役に立てるとうれしいです。

メール監視システムを作る その1(サーバー用意編)

要件としては以下の二つです

  • メールを監視したい。 GMailのルールだと限界感があるので、プログラムでゴニョゴニョやりたい。
  • 特定条件ならエラーメールを送信したい。

メールはGmailのメールアドレス(一つ)が対象なので、 GmailAPIを叩くPythonスクリプトを作成します。

作ったスクリプトはサーバー上で一定時間ごとに動かします。

サーバーを用意する

これを買いました。

https://www.amazon.co.jp/gp/product/B07CSN3CLY/ref=oh_aui_detailpage_o03_s00?ie=UTF8&psc=1www.amazon.co.jp

Win10が入ってました(OSなし版もあるみたいです) が容赦なくUbuntu 18.04.1 LTSを上書きインストールします。 デュアルブートにしてもいいんですけど、Win10はメインPCとノートPCに既にあるので今回はなしで。

なぜOSなし版を買わなかった・・・(3000円くらい安い、みたいな意見をどこかで見ました)

環境構築

Ubuntuのインストール方法や、SSHの構築方法は省略します。 いろんな記事があるので適用に参考にすればいいと思います。

  • GmailAPIを叩くスクリプトPythonで作成(次回紹介)
  • 上記Python環境を叩くためのPython環境(今回紹介
  • 一定時間ごとにバッチを叩く→cronを使用(今回説明

Python環境構築

Ubuntu 18.04.1 LTSPythonが既にインストールされています。 素晴らしいですね。

ただし、Python2系とPython3系が両方入っていますpythonコマンドで実行されるのは、デフォルトは2系です(python --versionで調べられます)

パッケージもPython2系とPython3系で管理が分かれています。 ですので、パッケージインストール時はpip install hogepip3 install hogeか、 どちらのバージョンに入れるのかを、明示的に指定する必要があります。

実行時も同様にpython hoge.pypython3 hoge.pyかどちらで実行するか、 明示的に指定する必要があります。

cron環境+動作設定

cronはスケジュール実行する仕組みです(Windowsでいうタスクスケジューラー) 有名な仕組みなので、色々情報もネット上にありますのでここで詳しく説明はしません。

ただですね、Ubuntu 18.04.1 LTSの情報が全然なく(パス関連が微妙に違う)、 困りました。

cronログ出力設定

デフォルト設定ではcronの実行ログが出力されず、cronが動いているか分からないので、 ログを出力するようにします。

/etc/rsyslog.d/50-default.conf

下記がコメントアウトされているのでコメントイン

cron.*    /var/log/cron.log

スケジュール設定

crontab -e

cron設定用のエディタが開くので、以下のような感じで記述 文法自体は他のサイトを参照してください。

crontabの書き方 | server-memo.net

#10分ごとにメールチェックをするバッチを叩きにいく。絶対パスにすること
*/10 * * * * /home/username/python/mail_checker/start.sh

start.shの中身はこんな感じ。実行日ごとにログファイルを作成し、追記しています。

#!/bin/sh
cd  `dirname ${0}`
date
datestr=`date '+%Y%m%d'`

echo begin mail checker
python3 main.py >> log/${datestr}.log 2>&1
echo end mail checker

GMailAPI を叩くPythonスクリプトです · GitHub

設定後、cronをreloadrestartすると、設定スケジュールどおりに実行される。 ※どちらが良いかは不明

/etc/init.d/cron restart
もしくは
/etc/init.d/cron reload

実行されているかは

/etc/init.d/cron status

で確認可能です。

まとめ

サーバー上で一定時間ごとにPythonスクリプトを起動させる準備が整いました。 次回はPythonでGmailAPIを叩き、受信ボックス内のメールを見ていきます