システム運用やデータ処理の現場では、毎日決まった時刻に処理を自動実行したい場面が多くあります。たとえば「毎日午前3時にログを集計してメール送信する」「毎週月曜にバックアップを取得する」などです。
Linux環境でこのような定期処理を実現する代表的な仕組みが cron です。そして、処理内容を柔軟に記述できるのが Python。両者を組み合わせることで、強力で効率的なバッチ処理を実装できます。
本記事では、中級エンジニア向けに cronとPythonで定期バッチ処理を構築する手順 を解説します。
cronとは?
cronは、Unix系OSに標準搭載されている「スケジューラ」です。
設定ファイル(crontab)に実行時刻とコマンドを記述することで、任意の時間にタスクを自動実行できます。
cronの構文
分 時 日 月 曜日 コマンド
例えば、毎日3時に処理を実行する場合は次のように書きます:
0 3 * * * /usr/bin/python3 /home/user/script.py
Pythonスクリプトの準備
まずは自動実行したい処理をPythonで書きます。
例として「ログファイルを読み込み、日付付きで出力する」スクリプトを作ってみましょう。
# /home/user/scripts/daily_job.py
import datetime
def main():
today = datetime.date.today()
with open(f"/home/user/logs/{today}.log", "w") as f:
f.write(f"Batch executed on {today}\n")
if __name__ == "__main__":
main()
これで、毎日ログが自動生成される仕組みを作れます。
cronに登録する
次に、このPythonスクリプトをcronで実行するよう設定します。
- crontabを編集
crontab -e
- 以下を追記
0 3 * * * /usr/bin/python3 /home/user/scripts/daily_job.py >> /home/user/logs/cron.log 2>&1
これで毎日午前3時にPythonスクリプトが実行され、標準出力・エラー出力がログに保存されます。
よく使うcronの設定例
- 毎時0分に実行
0 * * * * コマンド
- 毎週月曜の朝6時に実行
0 6 * * 1 コマンド
- 5分おきに実行
*/5 * * * * コマンド
デバッグと注意点
cronでうまく動かない場合は、以下を確認してください。
- 環境変数が異なる
cronは通常のシェルと異なり、PATHなどが制限されています。フルパス指定を徹底しましょう。 - 権限の確認
実行するユーザーがPythonや対象ファイルにアクセスできるかを確認します。 - ログを残す
標準出力・エラー出力をリダイレクトしておくとトラブルシュートが楽になります。
まとめ
- cron でスケジュール実行を管理
- Python で柔軟な処理を記述
- ログやエラーハンドリングを組み合わせれば、本格的なバッチ処理基盤を構築可能
定期実行が求められるタスクは多岐にわたります。
たとえば「データ収集」「レポート生成」「バックアップ」など、あなたの現場でも活用できる場面は多いはずです。
cronとPythonを組み合わせて、日常業務をもっと効率化してみましょう。