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. タスクスケジューラに登録
- 「タスクスケジューラ」を起動
- 「基本タスクの作成」→ 名前と説明を入力
- 「トリガー」で「毎日」や「毎時間」など任意の間隔を指定
- 「操作」で「プログラムの開始」→ 実行するスクリプト or バッチファイルを指定
- 完了
【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」を活用することで、簡単に定期実行できます。システム監視・レポート作成・メール送信など、日常の繰り返し作業を自動化する第一歩として、ぜひ活用してみてください。