Ubuntuでcronが実行されない時の原因と確認方法

Ubuntuでcronが実行されない時の原因と確認方法

Ubuntuでcronを設定したのにジョブが実行されない場合、設定ミスやサービス停止、権限不足などさまざまな原因が考えられます。本記事では、Ubuntu環境でcronが動作しない時に確認すべきポイントと具体的な調査手順を詳しくまとめます。

cronとは何か

cronはLinuxやUbuntuで定期的な処理を自動実行するためのスケジューラーです。

例えば以下のような用途で利用されます。

・バックアップの自動実行

・ログファイルの削除

・データベースのメンテナンス

・定期的なスクリプト実行

cronに登録されたジョブは指定された時間になると自動的に実行されます。

cronサービスが起動しているか確認する

最初に確認するべきなのはcronサービス自体が動作しているかどうかです。

以下のコマンドを実行します。

systemctl status cron

正常な場合は「active (running)」と表示されます。

停止している場合は起動します。

sudo systemctl start cron

OS起動時に自動起動する設定も確認します。

sudo systemctl enable cron

有効になっていない場合はcronが再起動後に停止したままになります。

cronの設定内容を確認する

設定ミスは最も多い原因の一つです。

現在登録されているcronジョブを確認します。

crontab -l

*/5 * * * * /home/user/test.sh

cronは以下の順番で設定します。

分 時 日 月 曜日 コマンド

例えば毎日午前3時に実行する場合です。

0 3 * * * /home/user/backup.sh

時間指定を間違えていないか確認します。

スクリプトに実行権限があるか確認する

cronから実行するファイルに実行権限がないと正常に動作しません。

権限を確認します。

ls -l /home/user/test.sh

実行権限がない場合は付与します。

chmod +x /home/user/test.sh

確認例

-rwxr-xr-x

このようにxが付いていれば実行可能です。

絶対パスを使用しているか確認する

cronでは環境変数が制限されています。

ターミナル上では動作してもcronでは失敗するケースがあります。

悪い例

php script.php

良い例

/usr/bin/php /home/user/script.php

実行ファイルの場所は以下で確認できます。

which php

他にもpythonやbashなども絶対パスで指定することが重要です。

cronログを確認する

cronが実際に起動しているかはログで確認できます。

Ubuntuではsyslogに記録されます。

grep CRON /var/log/syslog

リアルタイム監視する場合はこちらです。

tail -f /var/log/syslog

実行時に以下のようなログが表示されます。

CRON[12345]: (user) CMD (/home/user/test.sh)

ログに記録されていればcron自体は起動しています。

スクリプトのエラーを確認する

cronは標準出力やエラー内容が見えにくいため、処理結果をログへ出力すると原因を特定しやすくなります。

*/5 * * * * /home/user/test.sh >> /home/user/cron.log 2>&1

実行後にログを確認します。

cat /home/user/cron.log

エラー内容が表示されれば問題箇所を特定できます。

環境変数の違いを確認する

cronは通常のログインシェルと異なる環境で動作します。

例えば以下のような変数が利用できない場合があります。

・PATH

・HOME

・LANG

そのためcron内で明示的に指定します。

PATH=/usr/local/bin:/usr/bin:/bin

*/5 * * * * /home/user/test.sh

シェルを指定することも可能です。

SHELL=/bin/bash

環境依存のスクリプトでは非常に重要なポイントです。

rootと一般ユーザーの設定を確認する

cronにはユーザーごとの設定があります。

一般ユーザーのcron

crontab -e

rootユーザーのcron

sudo crontab -e

登録先を間違えると期待したユーザーで実行されません。

実行ユーザーが異なるとファイルアクセス権限の問題も発生します。

よくある原因一覧

cronが動作しない場合は以下を重点的に確認します。

・cronサービスが停止している

・cronの時間設定ミス

・スクリプトに実行権限がない

・絶対パスを使用していない

・環境変数不足

・実行ユーザーが異なる

・ログを確認していない

・スクリプト内部でエラーが発生している

これらの項目を順番に確認することで、多くのcronトラブルは解決できます。

まとめ

Ubuntuでcronが実行されない場合は、まずcronサービスの状態確認から始め、その後にcrontab設定、実行権限、絶対パス、ログ出力の順に確認すると効率的です。

特に「ターミナルでは動くのにcronでは動かない」というケースは、環境変数やパス設定が原因であることが多くあります。syslogや独自ログを活用しながら原因を切り分けることで、短時間で問題を解決できるようになります。