Linux の自動化でよく使われる cron
。
「手動でコマンドを打つと動くのに、cron に設定すると動かない…」という経験をした方は多いと思います。
本記事では、cron ジョブが実行されないときの チェックポイント3つ(パス設定・権限・ログ確認) を中心に、原因と解決方法をまとめます。
目次
1. パス設定の問題
症状
- cron に書いたスクリプトが「コマンドが見つからない」となる
- 手動では成功するのに、cron だと失敗する
原因
cron は 非常に制限された環境変数 で実行されます。
普段シェルで使っている /usr/local/bin
や $HOME/bin
が PATH に含まれていないことが多いです。
解決方法
- フルパスでコマンドを書く
* * * * * /usr/bin/python3 /home/user/script.py
「which コマンド」で実行ファイルのパスを確認してから書くのが確実です。 - スクリプトの先頭で PATH を指定
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
これを cron ファイルやシェルスクリプトに追記すると安定します。
あわせて読みたい


LinuxのCronジョブを使ったタスク自動化:crontabの基本と使い方
Cronジョブとは? Cronジョブとは、Linuxで定期的にタスク(ジョブ)を自動的に実行する仕組みのことです。システム管理者やユーザーがスクリプトやコマンドを一定の間…
2. 権限の問題
症状
- cron ジョブは登録されているのに実行されない
- ファイル書き込みが失敗している
原因
- 実行ユーザーに権限がない
- ファイルやディレクトリのパーミッション設定が不足している
- root しか実行できないコマンドを一般ユーザーが実行している
あわせて読みたい


Linux初心者必見!chmod、chown、umaskでファイルの権限を完全マスター
Linuxを使う上で、ファイルやディレクトリの権限と所有権を適切に管理することは非常に重要です。この記事では、初心者でもわかりやすく、chmod、chown、umaskといった…
解決方法
- ジョブを登録しているユーザーを確認:
crontab -l
- スクリプトの実行権限を付与:
chmod +x /home/user/script.sh
- root 権限が必要な場合は
sudo
を付与するか、root の crontab に記載します。
あわせて読みたい


【コマンド詳細】sudoの使い方とオプションまとめ
sudoコマンドは、一般ユーザーが一時的に特権(root権限)を取得して、特定のコマンドを実行するためのツールです。システムの安全性を保ちながら特権操作を行うために…
3. ログ確認
症状
- cron が「動いているのかすら分からない」
原因
cron は標準出力・標準エラーをメールで送る仕様ですが、メール環境が構築されていないと結果が見えません。
解決方法
- syslog / journalctl の確認
- RHEL/CentOS:
grep CRON /var/log/cron
- Ubuntu/Debian:
grep CRON /var/log/syslog
- RHEL/CentOS:
- ジョブの標準出力/エラーをログにリダイレクト
* * * * * /home/user/script.sh >> /home/user/cron.log 2>&1
→ 実際のエラー内容が分かるのでデバッグが楽になります。
あわせて読みたい


systemctlとjournalctlの使い方:Linuxでのサービス管理と起動の基本
systemdとは? Linuxのシステム起動とサービス管理を担うsystemdは、従来のinitシステムに代わり、多くのLinuxディストリビューションで採用されています。systemdの目…
4. その他の落とし穴
- 環境変数がない
→.bashrc
で設定している変数は引き継がれません。cron 内で明示的に設定が必要です。 - 改行コードの違い
→ Windows で作成したスクリプトをそのまま使うと、CRLF が原因で実行されないことがあります。dos2unix
コマンドで変換しましょう。 - cron サービス自体が停止している
systemctl status crond # RHEL系 systemctl status cron # Debian系
まとめ
cron が動かないときのチェックリスト:
- PATH 設定 → フルパスで記述 or PATH を指定
- 権限 → 実行ユーザーとパーミッションを確認
- ログ →
syslog
やリダイレクトでエラー内容を確認
これらを押さえれば、ほとんどの「cron が動かない問題」は解決できます。