cronのスケジュール設定は正しいはずなのに、ジョブが実行されていない。そんなとき、最初に確認すべきなのがcronのログファイルです。
この記事では、cronのログファイル(/var/log/cron)の確認方法から、journalctlを使ったsystemd環境での調査、ログが出力されないときのトラブルシュートまでを解説します。
RHEL 9 / CentOS 7 / Rocky Linux 9 / Ubuntu 24.04 LTSで動作確認しています。
・cronのログは
/var/log/cron で確認できる・
grep でジョブやユーザー単位の絞り込みが可能・systemd環境では
journalctl -u crond も有効・ログが出ない場合はrsyslog設定を確認する
この記事で扱うのは「cron が 実行した結果のログ」の確認方法です。「crontab -e で編集した 履歴」を探している場合は、後半のFAQで /var/spool/cron/ のタイムスタンプ確認方法も紹介します。
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
cronのログを確認する理由
cronはバックグラウンドで動作するデーモンです。設定した時刻にジョブが実行されたかどうかは、ターミナル上には何も表示されません。つまり、ジョブの実行結果を確認する手段はログしかありません。
cronのログを確認することで、以下のことがわかります。
・ジョブが実行されたか:指定した時刻にCMDエントリが記録されているか
・どのユーザーで実行されたか:ログに実行ユーザー名が記録される
・crontabが編集されたか:crontab -e による変更がREPLACEとして記録される
・異常終了していないか:エラー発生時の手がかりになる
cronの設定方法そのものについては、crontabコマンドの設定と書き方を参照してください。本記事では「設定したジョブが動いているかどうか」をログで確認する方法に集中します。
/var/log/cron でログを確認する基本操作
RHEL系(CentOS、Rocky Linux、AlmaLinux)では、cronのログは/var/log/cron に出力されます。1. tail で最新のログを確認する
まずは末尾の数行を確認するのが基本です。# tail /var/log/cron Nov 14 11:58:01 Tiger CROND[3132]: (pcp) CMD ( /usr/libexec/pcp/bin/pmie_check -C) Nov 14 12:00:01 Tiger CROND[3692]: (root) CMD (/usr/lib64/sa/sa1 1 1) Nov 14 12:00:01 Tiger CROND[3693]: (root) CMD (/usr/share/clamav/freshclam-sleep) Nov 14 12:01:02 Tiger CROND[3715]: (root) CMD (run-parts /etc/cron.hourly) Nov 14 12:01:02 Tiger CROND[3717]: (root) CMD (/var/www/system/snortsnarf.sh) Nov 14 12:01:02 Tiger run-parts(/etc/cron.hourly)[3715]: starting 0anacron Nov 14 12:01:03 Tiger anacron[3731]: Anacron started on 2017-11-14 Nov 14 12:01:03 Tiger run-parts(/etc/cron.hourly)[3733]: finished 0anacron Nov 14 12:01:03 Tiger run-parts(/etc/cron.hourly)[3715]: starting 0yum-hourly.cron Nov 14 12:01:03 Tiger run-parts(/etc/cron.hourly)[3739]: finished 0yum-hourly.cron Nov 14 12:01:03 Tiger anacron[3731]: Will run job `cron.daily' in 15 min. Nov 14 12:01:03 Tiger anacron[3731]: Will run job `cron.weekly' in 35 min. Nov 14 12:01:03 Tiger anacron[3731]: Will run job `cron.monthly' in 55 min. Nov 14 12:01:03 Tiger anacron[3731]: Jobs will be executed sequentially
2. tail -f でリアルタイム監視する
ジョブの実行タイミングをリアルタイムで確認したい場合は、tail -f を使います。# tail -f /var/log/cron
3. cat や less で全体を確認する
ログファイル全体を確認したい場合はless を使います。# less /var/log/cron
cat より less の方が扱いやすいでしょう。cronログのフォーマットを理解する
cronログの各行は、以下の形式で記録されます。Nov 14 12:00:01 Tiger CROND[3692]: (root) CMD (/usr/lib64/sa/sa1 1 1)
・Nov 14 12:00:01:実行日時(月 日 時:分:秒)
・Tiger:ホスト名
・CROND[3692]:cronデーモンのプロセスID(PID)
・(root):ジョブを実行したユーザー名
・CMD (...):実際に実行されたコマンド
【注意】cronログには「コマンドが起動された」という記録だけが残ります。コマンドの実行結果(成功・失敗)やエラーメッセージはcronログには記録されません。ジョブの標準出力・標準エラー出力を確認するには、crontabの設定でリダイレクト先を指定しておく必要があります。
# crontab設定でログをリダイレクトする例 0 3 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
grepでcronログを絞り込む
cronログには大量のエントリが記録されるため、目的の情報を素早く見つけるにはgrep による絞り込みが欠かせません。1. 特定のコマンドで絞り込む
# grep "backup.sh" /var/log/cron Apr 5 03:00:01 server01 CROND[12345]: (root) CMD (/usr/local/bin/backup.sh) Apr 5 03:00:01 server01 CROND[12347]: (root) CMD (/usr/local/bin/backup.sh)
2. 特定のユーザーで絞り込む
# grep "(webapp)" /var/log/cron Apr 5 01:00:01 server01 CROND[9876]: (webapp) CMD (/home/webapp/cleanup.sh)
3. crontabの編集履歴を確認する
誰かがcrontabを編集した場合、ログに「REPLACE」というエントリが記録されます。# grep "REPLACE" /var/log/cron Apr 4 15:32:10 server01 crontab[5678]: (admin) REPLACE (admin)
4. 特定の時間帯で絞り込む
# grep "Apr 5 03:" /var/log/cron Apr 5 03:00:01 server01 CROND[12345]: (root) CMD (/usr/local/bin/backup.sh) Apr 5 03:00:01 server01 CROND[12346]: (root) CMD (/usr/lib64/sa/sa1 1 1)
journalctlでcronログを確認する(systemd環境)
Ubuntu 24.04やRHEL 9などのsystemd環境では、rsyslogによる /var/log/cron への出力に加えて、journalctl でもcronログを確認できます。Ubuntuではデフォルトで /var/log/cron が存在しないため、journalctl が主要な確認手段です。
1. cronデーモンのログを表示する
# RHEL系(crond) # journalctl -u crond # Ubuntu系(cron) # journalctl -u cron
2. 今日のログだけを表示する
# journalctl -u crond --since today Apr 05 00:00:01 server01 CROND[1234]: (root) CMD (/usr/lib64/sa/sa1 1 1) Apr 05 01:00:01 server01 CROND[1456]: (root) CMD (run-parts /etc/cron.hourly) Apr 05 03:00:01 server01 CROND[1789]: (root) CMD (/usr/local/bin/backup.sh)
3. 時間範囲を指定して表示する
# journalctl -u crond --since "2026-04-04 22:00" --until "2026-04-05 06:00"
4. リアルタイム監視する
# journalctl -u crond -f
logrotateとcronログの世代管理
/var/log/cron は logrotate によって定期的にローテーション(世代交代)されます。過去のログを確認したい場合は、ローテーションされたファイルを参照する必要があります。# ls -la /var/log/cron* -rw-------. 1 root root 84523 Apr 5 12:01 /var/log/cron -rw-------. 1 root root 156234 Apr 4 03:22 /var/log/cron-20260404 -rw-------. 1 root root 148901 Mar 28 03:22 /var/log/cron-20260328 -rw-------. 1 root root 142567 Mar 21 03:22 /var/log/cron-20260321 -rw-------. 1 root root 139045 Mar 14 03:22 /var/log/cron-20260314
/etc/logrotate.d/syslog で確認できます。過去のログをgrepで一括検索する場合は、ワイルドカードを使います。
# grep "backup.sh" /var/log/cron* /var/log/cron:Apr 5 03:00:01 server01 CROND[12345]: (root) CMD (/usr/local/bin/backup.sh) /var/log/cron-20260404:Apr 4 03:00:01 server01 CROND[11234]: (root) CMD (/usr/local/bin/backup.sh) /var/log/cron-20260328:Mar 28 03:00:01 server01 CROND[10123]: (root) CMD (/usr/local/bin/backup.sh)
rotate の値を変更してください。cronのログが出力されないときのトラブルシュート
「/var/log/cron が存在しない」「ログが記録されていない」というケースは、実務でも意外と遭遇します。主な原因と対処法を確認しましょう。1. rsyslogでcronログが無効になっている
RHEL系では、rsyslogの設定でcronログの出力先が定義されています。# grep cron /etc/rsyslog.conf cron.* /var/log/cron
# systemctl restart rsyslog
2. cronデーモンが停止している
そもそもcronデーモン(crond)が動作していなければ、ジョブもログも出力されません。# systemctl status crond * crond.service - Command Scheduler Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled) Active: active (running) since Sat 2026-04-05 00:00:01 JST
# systemctl start crond # systemctl enable crond
3. /var/log/cron のパーミッションが不正
/var/log/cron は通常、root ユーザーのみが読み取れるパーミッション(600)になっています。一般ユーザーで確認しようとすると「Permission denied」になります。$ cat /var/log/cron cat: /var/log/cron: Permission denied # sudo を使って確認する $ sudo tail /var/log/cron
4. Ubuntuで /var/log/cron が存在しない
Ubuntuではデフォルトで /var/log/cron ファイルが作成されません。cronのログを確認するには、前述のjournalctl -u cron を使うか、rsyslogの設定を追加します。# /etc/rsyslog.d/50-default.conf に以下を追加 cron.* /var/log/cron.log # rsyslogを再起動 # systemctl restart rsyslog
本記事のまとめ
cronのログ確認方法を一覧にまとめます。| やりたいこと | コマンド |
|---|---|
| 最新のcronログを確認 | tail /var/log/cron |
| cronログをリアルタイム監視 | tail -f /var/log/cron |
| 特定のジョブで絞り込む | grep "スクリプト名" /var/log/cron |
| 特定ユーザーのジョブを確認 | grep "(ユーザー名)" /var/log/cron |
| crontab編集履歴を確認 | grep "REPLACE" /var/log/cron |
| systemd環境でcronログを確認 | journalctl -u crond |
| 今日のcronログだけ表示 | journalctl -u crond --since today |
| 過去のローテーション済みログを検索 | grep "スクリプト名" /var/log/cron* |
| rsyslogのcron設定を確認 | grep cron /etc/rsyslog.conf |
| cronデーモンの状態を確認 | systemctl status crond |
よくある質問(FAQ)
Ubuntu/Debian で /var/log/cron がありません。どこを見ればいいですか?
Ubuntu/Debian系では cron専用ログファイルは作られず、/var/log/syslog に他のサービスログと一緒に出力されます。grep CRON /var/log/syslog で抽出するか、systemd環境なら journalctl -u cron(サービス名は cron、CentOS系の crond と違うので注意)で確認します。
crontab を編集した履歴を確認できますか?
crontab 自体には編集履歴を残す機能はありませんが、/var/log/cron に (USERNAME) REPLACE (USERNAME) という行が記録されるため、いつ誰が crontab を更新したかは時刻ベースで追えます。/var/spool/cron/USERNAME ファイルのタイムスタンプ(ls -l /var/spool/cron/)も最終編集時刻として参考になります。本格的に変更履歴を管理するなら crontab を git 配下に置き、適用前に diff を取る運用が確実です。
cron でスクリプトが実行されているのに標準出力が見えません。なぜですか?
cron は標準出力・標準エラーをデフォルトでユーザー宛のローカルメールに送ります。/var/spool/mail/USERNAME を確認してください。実務ではメールで埋もれるため、crontab に * * * * * /path/to/script.sh >> /var/log/myscript.log 2>&1 のようにファイル出力をリダイレクトする方が運用しやすいです。
journalctl で cron のログだけを絞り込む方法は?
CentOS/RHEL系は journalctl -u crond、Ubuntu/Debian系は journalctl -u cron です。直近20件だけ見るなら -n 20 --no-pager、リアルタイム追跡なら -f、過去1時間に絞るなら --since "1 hour ago" を組み合わせます。
「cronが動かない」と夜中に焦った経験はありませんか?
cronの設定ミスは、ログの読み方を知らなければ原因の特定すらできません。しかし、ログの見方はLinuxサーバー管理の基本中の基本です。
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 次のページへ:unameコマンドでLinuxのカーネルバージョンを確認する方法|OS情報の確認コマンドも
- 前のページへ:CentOS7でログ容量制限を設定する方法|journaldのSystemMaxUse設定と容量確認
- この記事の属するカテゴリ:Linuxtipsへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます