cronを使用してPythonスクリプトを指定した時間に自動実行します。cronの設定方法を次に示します。

1.書式

各項目はスペースを開けて記載します。

分 時 日 月 曜日 コマンド

2.設定値

cronの設定方法
カラム 意味
0~59の値で指定し、*を指定した場合、毎分となります。
0~23の値で指定し、*を指定した場合、毎時となります。
1~31の値で指定し、*を指定した場合、毎日となります。
1~12の値で指定し、*を指定した場合、毎月となります。
曜日 0~7の値で指定し、*を指定した場合、毎日となります。
コマンド 実行するコマンドやシェルスクリプトを指定します。

下記のような書き方もできます。
◆複数指定 ⇒ カンマで区切ります。「0,30」
◆範囲指定 ⇒ ハイフンを使用します。 
 8時~12時の0分、30分にconst.pyを実行
 00,30 8-12 * * * python /home/const.py
◆間隔 15分毎にtest.pyを実行します。
 */15 * * * * python /home/test.py
◆ 起動時に毎回、boot.pyを実行します。
 @reboot python /home/boot.py

3.crontabによる設定

下記のコマンドでcrontabを起動し、定期実行したい時間とそのスクリプトを書き込み設定を行います。設定した内容は、そのユーザ権限で実行されます。

$ crontab -e

実行する日時を指定して、実行するpythonファイルのパスを絶対パスで指定します。pythonを実行するには最初に「python 」、その後にファイル名を記述します。なお、cronのエラーログは、/var/log/syslogに出力されます。cronで実行するスクリプトには実行権限が必要です。

4.1行で済むシェルコマンドの書式

指定するシェルコマンドは、次のように一行に記述して、条件に応じたコマンドや複数コマンドが実行できます。

「ls hello.txt || echo “Hello!” > hello.txt」
hello.txtが存在しなければ、文字列”Hello!”をhello.txtに出力して生成
「ls hello.txt && rm -f hello.txt」
hello.txtが存在したら、hello.txtを削除
「[ -f hello.txt ] || echo “Hello!” > hello.txt」
[ -f hello.txt ] は “hello.txtが存在しない場合はファイルを作成
「ls hello.txt; cp hello.txt yeah.txt」
hello.txtの有無を確認し、その結果に関わらずhello.txtのコピーをyeah.txtとして生成
「ps aux | grep ntpd」
プロセス一覧リストを出力して、そのうち”ntpd”が含まれる行を出力

5.Pythonスクリプトの作成

cronで呼び出すPythonスクリプト「trigger.py」を作成します。

import requests
 
def main():
    response = requests.post(
       'http://xxxx/get.php')
    print  response.text
 
 
if __name__=='__main__':
    main()

次の設定によりcronで1分ごとに、作成したPythonスクリプト「trigger.py」を呼び出します。

$crontab -e
* * * * * python /home/trigger.py

cronが動作しているかを次のchkconfigコマンドを使って確認します。

$ sudo apt-get install chkconfig
$ sudo chkconfig cron
cron on

<参考>

Pythonスクリプト「trigger.py」で呼び出される「get.php」を次に示します。サーバ変数「$_SERVER[“REMOTE_ADDR”]」を使って呼び出し側のIPアドレスを取得するスクリプトで、前回の通知と異なっていればメールで通知します。

<?php
    $ipAddress = $_SERVER["REMOTE_ADDR"];
    echo date("Y-m-d H:i:s")." ".$ipAddress."<br>";
    if($ipAddress!==file_get_contents(IPadr.txt, NULL, NULL, 20)){
    	file_put_contents ( IPadr.txt, date("Y-m-d H:i:s")." ".$ipAddress );
	mb_send_mail("XXXXXXX@xxxx", "", $ipAddress, "From: globalIP@com");
    }
?>

サーバ変数「$_SERVER」の一覧を次に示します。

$_SERVER変数一覧
変数名 説明
$_SERVER['SERVER_NAME'] 現在のサーバーのホスト名
$_SERVER['REQUEST_URI'] ページにアクセスする際に指定されたURI(ドメイン以下のパス)
$_SERVER['REQUEST_METHOD'] 現在のページにアクセスする際に使用されたメソッド
$_SERVER['DOCUMENT_ROOT'] 現在実行されているスクリプトのドキュメントルートディレクトリ(ドメインルート)
$_SERVER['SCRIPT_FILENAME'] 現在実行されているスクリプトの絶対パス