ロリポップレンタルサーバで、クーロンを使ってバッチを実行して結果を必ずメールで受信

JavaScript

今回は、ロリポップレンタルサーバでクーロン設定をおこなう方法、および、シェル実行結果をメールで受け取る方法について紹介します。


ロリポップは、crontabを直接編集してクーロンの設定をおこなうことはできないですが、クーロン設定画面で細かい起動設定をおこなう事ができます。
このクーロン設定画面では実行結果を受け取るメールアドレスの設定も可能であり、実行結果のメール受信が可能です。


メールでの受信は、バッチの実行結果によってメール本文の内容を変更する方法についても紹介していきます。


環境情報


バッチから実行するバッチは、Pythonで実装されていることを前提とします。


  • レンタルサーバ:ロリポップ
  • シェルから呼び出すバッチ:Python

WEB画面でクーロン設定をおこなう


ロリポップでのクーロン設定はWEB画面でおこないます。


ロリポップのユーザー専用ページにログインし、左メニューで「サーバーの管理」から「cron設定」を選択します。


ロリポップでのクーロン設定

cron設定画面がひらきます。
クーロンの設定、および、設定済クーロンの確認は、本画面でおこないます。



画面上にあるように、日付(月)・日付(日)・曜日・時間(時)・時間(分)をプルダウンで形式で選択する形で設定をおこないます。
筆者の契約しているプランはエコノミープランですが、以下の設定となります。
プランによって異なるのは最小実行間隔のみ(1分毎、5分毎)となります。


日付(月)

毎月、1月~12月

日付(日)

毎日、1日~31日

曜日

毎日、日曜日~土曜日

時間(時)

毎時、0時~23時

時間(分)

1分毎~10分毎、0分~59分


このように設定項目は豊富なので、ほとんどの設定のニーズに対応することができます。
しかし、crontabを直接編集すれば可能な設定はおこなうことはできません。
例えば、毎週、月曜日と金曜日だけ実行するという設定は、1つの設定ではおこなうことができません。
毎週、月曜日と金曜日に実行するといった設定をおこなう場合は、月曜日に実行するという設定と、金曜日に実行するという設定の2つの設定が必要となります。


複数の設定をおこなえばcrontabを直接編集することと同じ事ができるのであれば問題ないと思われますが、クーロンの設定には上限があるので注意が必要です。
クーロンの設定上限は、契約しているプランによって異なります。


 

cron登録数

最小実行間隔

エコノミー

1

5分毎

ライト

5

5分毎

スタンダード

10

1分毎

ハイスピード

10

1分毎

エンタープライズ

10

1分毎


メールでシェル実行結果を受け取る


クーロンの実行結果をメールで受け取ることができます。
設定は簡単で、メールアドレスをWEB画面で設定するだけです。



この設定をおこなうだけで、クーロンの実行結果が登録したアドレス宛にメールが送信されます。


しかし、メールが送信される条件は、クーロンの実行結果に出力がある場合、のみとなります。
つまり、標準出力やエラー出力といった出力がおこなわれない場合は、メールは送信されません。


メールでバッチが動作した結果を受信するためには、バッチを実行するシェルファイルに標準出力をおこなうように設定をおこなえばよいです。


#!/bin/bash
python cronSample.py
echo "バッチ処理が終了しました。" >&1

WEB画面で設定したメールアドレスには、標準出力した”クーロン設定での処理完了”とだけ記載されたメールが送信されます。


上記の設定では、クーロンが実行されたタイミングで必ずメールが送信されます。
本来であれば、クーロンの実行が失敗した時、といった一定の条件と一致した場合についてのみメールを送信したい場合がほとんどです。


その場合は、プログラムでの実行結果をシェルで受け取り、受け取った実行結果によって標準出力有無を判断する必要があります。


#!/bin/bash
ret=$(python cronSample.py)
if [ $ret = 0 ]; then
  echo "バッチ処理で異常が発生しました。" >&1
fi
#!/usr/local/bin/python3.4
# coding: utf-8
import sys

sys.stdout.write("0")

シェルの中身はシンプルで、Pythonで実行した結果が失敗(0)であった場合に標準出力をおこなっています。
結果、失敗したらメールが送信される、ということになります。


Pythonのプログラムでは、0を標準出力しているのみです。
これはサンプルプログラムでなので0を標準出力しているのみなのですが、実際のプラグラムでは、この部分を修正すればよいです。



クーロン設定での小技集。設定の基本と、ちょっとしたテクニックを紹介

Linux

今回は、ちょっと特殊なクーロン設定を、まとめる形で紹介していきます
実際の業務でクーロンの設定をおこなう際、“あれ?あの設定でどうやるんだっけ?”というときに役立つTIPS集としてまとめます。


何か思いだしたら都度追記していきます。


クーロン設定の基本


まずは設定の基本を紹介します。
クーロン設定は以下の書式になります。

分  時  日  月  曜日 ユーザ名  コマンド

0分から59分までを定義

0時から23時までを定義

1日から31日までを定義

1月から12月までを定義。英字略形も可(jan,feb…dec)

曜日

0から7までを定義。0が日曜。英字略形も可(sun,mon…sat)


各定義について、リスト定義と範囲体後のどちらも可能です。

リスト

1,5,10

指定した値の場合のみ実行

範囲

1-5

指定した値の範囲内であれば実行

共存

1,5,10-15

リストと範囲の混在定義

間隔

1-5/2

「/」の後に間隔値を定義。左記の例だと「1,3,5」


月末に1回だけ動く


“月末に1回だけ動く”といったクーロン設定について紹介します。

結論を先に言いますと、以下の設定でOKです。


59 23 28-31 * * root   /usr/bin/test `date -d tomorrow +\%d` -eq 1 && sh /home/root/sample.sh

これで、”月末に1回だけ動く”というクーロン設定になります。

各設定の詳細について説明してきます。

前半部分が「月末」の定義です。

59 23 28-31 の部分ですね。


毎月、28日、29日、30日、31日の、23時59分にクーロンを動かせる設定になります。
でもこのままだと、月末に1回だけではなく、最大4回動いてしまいます。

なので、次の日が”1日”だったらという条件を追加します。
つまり、3月だと3月31日の次の日が1日(4月1日)だったら月末、
9月だと9月30日の次の日が1日(10月1日)だったら月末、という事ですね。


その計算が、/usr/bin/test `date -d tomorrow +\%d` -eq 1 &&  です。


testコマンドで条件を記述しています。
「date -d tomorrow +\%d」の返り値が1だったら月末と判定します。


この条件を28日から31日に動かすことによって、月末1回動作します。


標準出力をさせない


クーロンで実行したプログラムの実行結果が標準出力されることを防ぐためには、クーロン設定の末尾に標準出力を無しにする記述をおこないます。

55 23 28-31 * * root   /usr/bin/test `date -d tomorrow +\%d` -eq 1 && sh /home/root/sample.sh > /dev/null 2>&1

標準出力をなし(NULL)にします。
これで、標準出力はおこなわれません。