Linux で毎日自動的に Python スクリプトを実行し、Git にコミット・プッシュする方法
定期的に Python スクリプトを実行して、結果を Git に自動コミット・プッシュしたい ── そんなときに便利なのが、Linux の cron(クロン) 機能です。この記事では、「毎日日本時間 10 時に自動実行する」設定を例に、スクリプトの作り方からトラブル対処まで解説します。
1. cron とは何か?
cron
は Linux 標準のタスクスケジューラで、指定した時間に自動的にコマンドやスクリプトを実行できます。Windows でいう「タスクスケジューラ」のような役割です。
設定は「crontab」というファイルに記述します。
2. スクリプトの準備
まず、自動で実行したい処理をまとめたバッチスクリプト(.sh
)を作成します。
ここでは /home/user/project/daily_job.sh
に作るとしましょう。
#!/bin/bash
# daily_job.sh - Pythonスクリプトを実行しGitに自動コミット・プッシュする
# 実行ディレクトリへ移動
cd /home/user/project
# Pythonの実行(絶対パスを指定するのがポイント)
/usr/bin/python3 your_script.py >> /home/user/project/cron.log 2>&1
# Git操作
git add .
git commit -m "Daily update $(date '+%Y-%m-%d %H:%M:%S')"
git push origin main
ポイント:
>> /home/user/project/cron.log 2>&1
→ 実行ログとエラーログをcron.log
に保存。後から確認できるようにします。/usr/bin/python3
の部分は、which python3
コマンドで実際のパスを確認しておきましょう。chmod +x daily_job.sh
で実行権限を付与するのを忘れずに。
3. cron の設定
cron の設定ファイルを開きます:
crontab -e
そして、次の 1 行を追加します:
0 10 * * * sh /home/user/project/daily_job.sh
これは「毎日 10 時ちょうどにスクリプトを実行」という意味です。
フォーマット:
分 時 日 月 曜日 コマンド
4. 時間設定(タイムゾーンの確認)
cron はシステムのタイムゾーンを基準に動作します。
実行時刻がずれる場合は、時差が原因かもしれません。
現在の時刻を確認:
date
日本時間(JST)でなければ、次のコマンドで変更します:
sudo timedatectl set-timezone Asia/Tokyo
5. cron サービスの起動確認
cron 自体が動いていなければ、設定しても実行されません。
以下で確認します:
sudo systemctl status cron
または
sudo systemctl status crond
active (running)
であれば OK です。
もし停止していたら、次で起動します:
sudo systemctl start cron
sudo systemctl enable cron
6. 実行確認とログの確認
設定後に動作を確認するため、手動で実行してみましょう。
sh /home/user/project/daily_job.sh
問題なく動作すれば、cron でも同様に動くはずです。
もし自動実行されていない場合は、ログを確認します。
grep CRON /var/log/syslog
またはシステムによっては:
cat /var/log/cron
ここで、スクリプトが実行された形跡やエラーメッセージを確認できます。
7. よくあるトラブルと対処法
✅ Python が見つからない
cron はログイン時の環境変数(PATH)を読み込まないため、python
コマンドが見つからないことがあります。
→ 絶対パス(例:/usr/bin/python3
)を指定しましょう。
✅ Git の認証が通らない
SSH キーを設定していない場合、git push
が止まってしまうことがあります。
→ 事前に ssh-keygen
で鍵を作成し、GitHub/GitLab に登録しておきましょう。
✅ 権限エラー
スクリプトが root ユーザーで動いていない場合、一部の操作に権限が足りない可能性があります。
→ /home
配下などのユーザー権限ディレクトリで動かすのが安全です。
8. 自動実行の確認方法
毎日実行後に cron.log
を確認してみましょう:
cat /home/user/project/cron.log
そこに Daily update 2025-10-12 10:00:01
のようなログが出ていれば成功です。
まとめ
手順 | 内容 |
---|---|
① | Python スクリプトをまとめた bash ファイルを作る |
② | 実行権限を付ける (chmod +x ) |
③ | crontab -e で毎日 10 時のスケジュールを登録 |
④ | タイムゾーンと cron サービスを確認 |
⑤ | ログ出力を確認してトラブルを解消 |