2024年6月25日火曜日

Python で指定の cron が一日何回実行されるかカウントするスクリプト

Python で指定の cron が一日何回実行されるかカウントするスクリプト

概要

前回指定の日時にcronが実行されるかどうかチェックするスクリプトを作成しました
今回は更にそれを応用して指定の cron が一日に何回実行されるのかカウントしてみました

環境

  • macOS 11.7.10
  • Python 3.11.7
  • croniter 2.0.5

インストール

  • pipenv install croniter

サンプルスクリプト

from datetime import datetime, timedelta

from croniter import croniter


def count_run_today(cron_expression, target_date: str):
    # 指定の日付の開始、指定の日付の明日の開始時刻を取得
    target_datetime = datetime.strptime(target_date, "%Y/%m/%d")
    today_start = datetime(
        target_datetime.year, target_datetime.month, target_datetime.day
    ) - timedelta(seconds=1)
    tomorrow_start = today_start + timedelta(days=1) + timedelta(seconds=1)
    # cron オブジェクトの作成
    cron = croniter(cron_expression, today_start)
    # 当日内に実行される日時の分だけカウントする
    run_count = 0
    while True:
        # 次に実行される日時を取得
        next_run = cron.get_next(datetime)
        if today_start < next_run < tomorrow_start:
            run_count += 1
        else:
            break
    return run_count


# テスト正常系
print("正常系テスト")
print(count_run_today("0 12 * * *", "2024/06/24"))  # => 1
print(count_run_today("0 12 24 6 *", "2024/06/24"))  # => 1
print(count_run_today("*/1 * * * *", "2024/06/24"))  # => 1440
print(count_run_today("*/5 * * * *", "2024/06/24"))  # => 288
print(count_run_today("*/30 * * * *", "2024/06/24"))  # => 48
print(count_run_today("*/30 1 * * *", "2024/06/24"))  # => 2

最後に

当日分の cron が正しく全件実行されるか確認したいときに使えるスクリプトです

0 件のコメント:

コメントを投稿