cronを設定し定期的にpythonで自作したプログラム結果をメールで転送する方法

#１　サーバーを用意します。

サーバーはなんでも良いですが今回はロリポップと契約をしました。一番安いプランであるエコノミープランで月額99円です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140071/9b831958-03a7-7f2b-e946-3a50d90ae795.png)

なおエコノミープランはSSHは使用する事ができません。しかしPythonは使用可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140071/35dc73dd-2c4d-746d-6076-261cdb03e23c.png)

まずPythonが2.Xか3.Xかをチェックしてください。
Python3.7にアップグレードできますのでPython3.7へアップグレードしてから
PIPモジュール自体を導入します。そのあとにPandasやRequestsなどあなたが好きなモジュールをドンドン入れていきます。
※具体的方法は後述します。

#２　全体像を俯瞰で把握し理解しましょう
　まず今回自分がやりたい事の全体をなんとなく視座を高くしながら理解・確認しましょう。
　１サーバーを建てて
　２シェルでpyファイルをキックさせて
　３メールで5分毎に転送させて
　４ショットをcronで毎日ガンガン回し欲しい情報を取得します。

　なかなかこのように言われてもわかりずらくてよくわからないですよね。

言い方を変えましょう。

「毎日5分毎に自分のPythonプログラムを回した実行結果をメールに自動的に飛ばす！今回やる事はこれです。
もしも主旨と異なる方がいれば記事を読むだけ時間の無駄になってしまいますので他記事をご覧いただければ幸いです。

#３　シェルファイルの作成

pyファイルを実行させる為にShellを用います。
test.sh　というファイルを作成して以下簡単なコマンドを書いてみましょう。
hogeの部分は都度変えてください。

```
#!/bin/sh

cd /home/hogehoge/9/hogehoge/web/
/usr/local/bin/pythonhoge /home/hoge/9/hogehoge/web/hello.py

exit
```
１内容はディレクトリをロリポップサーバーに移動して
２hello.pyファイルを実行する

以上です。簡単ですね。

　※注意点は２つあります。必ず以下２つを実施してください。
上記を実施しない場合はそれぞれエラーとなりエラー構文が定期的にメールに送られてくる羽目になります。


注意１　サーバーにおくshファイルは必ず権限を700に変更する
　シェルファイル権限を700にしないと永遠とエラー内容がメールされます。

注意２　シェルファイルをnotepad++などで開いて必ず改行モードをLFに置換えして下さい。
　LFにしないと正しく実行されませんので同じく永遠とエラー内容がメールされます。

#４　pyファイルの作成
シェルファイルでpyを定期的に実行できる環境が整ったら
続いてはpythonを書いていきます。今回は文字を出力して終了です。
pythonは3.4か3.7かサーバ事に異なりますのでいずれか正しいサーバーを指定してください。
※サーバ管理会社ごとにPythonVerは異なります。3.4だとpipインストールできませんでしたので注意してください。

さてpyファイルの中身は以下最も簡単にしましょう。

```
#!/usr/local/bin/python3.7
# coding:utf-8

print ("Hello world!")
```

これで自分が作成したPythonファイルが定期的に実行される環境を作る事ができました。

#６　作成した.shと.pyフlウィルをFTPでアップロード

ロリポップのサーバーに.shファイルと.pyファイルをFTPでアップロードします。
ディレクトリ階層を作成しても良いですが今回アップロードする場所はホーム直下(=最も上階層でこれ以上は階層がないところ)です。
平たくいえば　一番上の階層に.shと.pyを置いてください。もちろん関係ないファイルが沢山あってもOKです。
　※前述したように.shは必ずLF改行コードを変えて、700に権限を変更することを忘れないでください。

#７　ロリポップ管理画面でのcronの設定

メールを飛ばしたい時間帯や日程をそれぞれ設定します。
ロリポップではcron設定はGUIによる設定であまり実行時間についてcronの融通が利きません。
この点は仕様ですのでシビアな時間設定をしたい人はこの環境には向きません。

注意点は以下２つです。

１
ファイルパスには　shファイル名　だけ入力すれば大丈夫です。
ファイルパスやpyファイル名称など入力不要です。

２
実行結果を転送したいメールアドレスを設定してください。
指定した時間ごとにpythonの出力結果、今回であれば　helloworld　が出力されメールに転送されます。

#８メールを確認しましょう

ロリポップから正常にメールが送られてくる事を確認します。

![098.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140071/364b38dd-3058-d182-acda-503d233a3d42.jpeg)

今回はGMAILで確認しました。

#９導通後　まずはPIPをインストールします。

前提：python3.7環境以前は以降の記事は失敗しますので注意してください。

さて一連の流れが正常に動きましたのでSSHを使わずにPython環境にpipを入れていきます。
まずシェルファイルを書いてロリポップの5分に１回のcronを実行させましょう。

```
#!/bin/sh

# まずPIPを三行でインストールする

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
/usr/local/bin/python3.7 get-pip.py --user
/usr/local/bin/python3.7 -m pip install --upgrade pip
```

うまくインストールされればメールにPIPインストール実行結果が表示されて送られてきます。


#９導通後　shellファイルを書き換えて各モジュールのインストールしましょう

シェルを使用してPIPが入りました。PIPが入れば我々は水を得た魚です。
全て必要なモジュールをインストールしてしまいましょう。
例えばrequestsをインストールする場合はたった2行です。

```
#!/bin/sh

/usr/local/bin/python3.7 -m pip install requests
```

これを実行してメールの結果を待ちましょう。ロリポップのcronでは5分毎に実行されますので
おとなしく5分待ち実行結果がメールで送られてくるのを待ちます。

無事にインストールが完了したメッセージを確認したら自分が導入した他のモジュールもインストールしてみましょう。
例えば以下のモジュールを導入してみましょう。

```
#!/bin/sh

/usr/local/bin/python3.7 -m pip install pandas
/usr/local/bin/python3.7 -m pip install numpy
/usr/local/bin/python3.7 -m pip install matplotlib
/usr/local/bin/python3.7 -m pip install japanize-matplotlib
/usr/local/bin/python3.7 -m pip install Pillow
/usr/local/bin/python3.7 -m pip install beautifulsoup4
/usr/local/bin/python3.7 -m pip install tweepy
```

これらのモジュールがわからない場合は以下URLをみて参考にしてください。記事作者さんが丁寧に解説されていますね。感謝致します。 https://karupoimou.hatenablog.com/entry/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81Python%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8


今回は以上です。

最後に。国籍問わず先人の苦労や記事に残された全コーダーへ深く感謝致します。
Thank you for all corders who wrote the programming article in whole world.