Python + cronで実現する週次自動化の設計パターン
「毎週やるタスク」って、忘れがちですよね。
カレンダーにリマインダー入れても、忙しいと後回しになって結局やらない…。
そこで、Python + cronで完全自動化しました。週次タスクを人間が意識しなくても勝手に回る仕組みです。
週次自動化に向いているタスク
すべてのタスクが自動化できるわけではありません。
週次自動化に向いているのは:
– 定型作業(判断が不要)
– 失敗してもリカバリー可能
– 深夜実行でOK
例:
– Downloadsフォルダの整理
– バックアップの作成
– ログのローテーション
– レポートの生成
設計パターン
週次自動化スクリプトの基本構造はこんな感じ。
#!/usr/bin/env python3
import sys
import logging
from datetime import datetime
def setup_logging():
"""ログ設定"""
log_file = f"/path/to/logs/weekly_{datetime.now().strftime('%Y%m%d')}.log"
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s [%(levelname)s] %(message)s',
handlers=[
logging.FileHandler(log_file),
logging.StreamHandler()
]
)
def main():
"""メイン処理"""
try:
logging.info("週次タスク開始")
# 処理1
# 処理2
# 処理3
logging.info("週次タスク完了")
return 0
except Exception as e:
logging.error(f"エラー発生: {e}")
return 1
if __name__ == "__main__":
setup_logging()
sys.exit(main())
ポイント1: ログを必ず残す
自動化スクリプトは、実行結果が見えないのが怖いところ。
だから、ログは必須です。
- 何時に実行されたか
- 何を処理したか
- エラーが出たか
これらを全部ログに残しておけば、後で確認できます。
ポイント2: ドライランモードを用意する
いきなり本番実行は危険です。
--dry-run フラグを用意して、「実際には何もしないけど、何をするか表示する」モードを作りましょう。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--dry-run', action='store_true')
args = parser.parse_args()
if args.dry_run:
print("ドライラン: ファイルを移動 (実際には移動しない)")
else:
shutil.move(src, dst)
テストが捗ります。
ポイント3: cronの設定
毎週日曜の朝4時に実行する例:
# crontab -e で編集
0 4 * * 0 /usr/bin/python3 /path/to/weekly_task.py --mode production >> /path/to/cron.log 2>&1
ポイント:
– /usr/bin/python3 のようにフルパス指定
– 標準出力・エラー出力をログファイルにリダイレクト
– 実行権限を付与(chmod +x weekly_task.py)
ポイント4: エラー通知
エラーが起きたときに気づけないと意味がないので、通知機能も入れます。
- メール送信
- Slack通知
- Telegram通知
お好みで。
まとめ
Python + cronで週次タスクを自動化すれば、「忘れてた!」がなくなります。
重要なのは:
– ログを残す
– ドライランモードを用意する
– エラー通知を入れる
この3つを守れば、安心して自動化できます。
あなたの「毎週やるタスク」、自動化してみませんか?