【Python】定期実行スクリプトを作成する方法|スケジューラと組み合わせて自動化

【Python】定期実行スクリプトを作成する方法|スケジューラと組み合わせて自動化 Python

Pythonで作成したスクリプトを毎日、毎時など定期的に実行したいというケースは多くあります。バッチ処理、ログ収集、定時レポート送信など、業務自動化の基本となるこの処理は、OSのスケジューラと組み合わせることで簡単に実現できます。

この記事では、Pythonで定期実行スクリプトを作成し、Windowsの「タスクスケジューラ」やLinuxの「cron」と連携する方法を解説します。

Python側の準備|まずは単体で動くスクリプトを用意

例として、定期的に現在時刻をログ出力するPythonスクリプトを作成します。

# log_time.py
from datetime import datetime

with open("log.txt", "a", encoding="utf-8") as f:
    f.write(f"[{datetime.now()}] スクリプト実行\n")

このスクリプトは、実行するたびにlog.txtに現在時刻を追記します。

【Windows編】タスクスケジューラで自動実行

1. バッチファイルを作成(任意)

@echo off
python "C:\path\to\log_time.py"

※補足: Pythonのパスが通っていない場合は、フルパス指定で C:\Python39\python.exe のように記述します。

2. タスクスケジューラに登録

  1. 「タスクスケジューラ」を起動
  2. 「基本タスクの作成」→ 名前と説明を入力
  3. 「トリガー」で「毎日」や「毎時間」など任意の間隔を指定
  4. 「操作」で「プログラムの開始」→ 実行するスクリプト or バッチファイルを指定
  5. 完了

【Linux/macOS編】cronで定期実行

1. スクリプトを保存

/home/user/scripts/log_time.py に保存したとします。

2. 実行権限を付与

chmod +x /home/user/scripts/log_time.py

3. crontabを編集

crontab -e

毎時0分にスクリプトを実行する場合:

0 * * * * /usr/bin/python3 /home/user/scripts/log_time.py

ポイント: cronでは環境変数が引き継がれないため、Pythonの絶対パスを指定するのが確実です。

Pythonだけでスケジューリングする方法(簡易)

外部スケジューラを使わずに、Python内でループ+sleepを使って定期処理することも可能です。

import time
from datetime import datetime

while True:
    with open("log.txt", "a") as f:
        f.write(f"[{datetime.now()}] 定期処理\n")
    time.sleep(3600)  # 1時間おき

ただしこの方法ではスクリプトを起動し続ける必要があり、OS再起動で止まるため、タスクスケジューラを使った方が安定します。

まとめ

Pythonで作成したスクリプトは、Windowsなら「タスクスケジューラ」、Linuxなら「cron」を活用することで、簡単に定期実行できます。システム監視・レポート作成・メール送信など、日常の繰り返し作業を自動化する第一歩として、ぜひ活用してみてください。