aoishiの備忘録

備忘録

Pythonとcronで秒単位で定期処理する

やりたいこと

  • Pythonスクリプトを定期的に実行したい
  • cronで手軽に定期処理したい
  • 秒単位で定期実行したい

解決方法

Pythonスクリプト作成

下記のように、実行間隔(秒)と実行回数をコマンドライン引数で与えて、Pythonスクリプトの中で繰り返し実行できるようにします。

import argparse
from datetime import datetime
import time

# ここに定期実行したい処理を記載
def main():
    pass

if __name__ == '__main__':
    argparser = argparse.ArgumentParser()
    argparser.add_argument('-i', '--interval', type=int, default=1)
    argparser.add_argument('-c', '--count', type=int, default=1)

    args = argparser.parse_args()
    _start_time = 0
    for i in range(args.count):
        while int(datetime.now().strftime('%s')) - _start_time < args.interval:
            time.sleep(0.1)
        _start_time = int(datetime.now().strftime('%s'))

        # ここで定期実行したい処理を呼び出す
        main()

Pythonスクリプトをcronに設定

例えば、5秒毎に処理をしたい場合には、下記のようにcronの設定をします。

$ crontab -e
----
* * * * * /path/to/python_script -i 5 -c 12
----