cronのログを確認する方法|/var/log/cronとjournalctl -u crondでエラーを特定

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxtips > cronのログを確認する方法|/var/log/cronとjournalctl -u crondでエラーを特定
「cronで設定したジョブが動いていないみたいだけど、どこを見ればいいんだろう」

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/ のタイムスタンプ確認方法も紹介します。


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

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

Ctrl+C で監視を終了できます。tail -f の詳しい使い方はtail -fコマンドでログをリアルタイムに監視する方法を参照してください。

3. cat や less で全体を確認する

ログファイル全体を確認したい場合は less を使います。

# less /var/log/cron

less では / キーで文字列検索、q キーで終了できます。ファイルが大きい場合は 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)

この記録から、いつ・誰がcrontabを変更したかを特定できます。本番環境でジョブが突然動かなくなった場合、まずREPLACEの履歴を確認するのが実務上の鉄則です。

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

tail -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

RHEL系ではデフォルトで4世代分が保持されます。logrotateの設定は /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)

ローテーションの世代数を変更したい場合は、logrotateの設定ファイルで rotate の値を変更してください。

cronのログが出力されないときのトラブルシュート

「/var/log/cron が存在しない」「ログが記録されていない」というケースは、実務でも意外と遭遇します。主な原因と対処法を確認しましょう。

1. rsyslogでcronログが無効になっている

RHEL系では、rsyslogの設定でcronログの出力先が定義されています。

# grep cron /etc/rsyslog.conf cron.* /var/log/cron

この行がコメントアウトされていると、/var/log/cron にログが出力されません。コメントを外してrsyslogを再起動してください。

# 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

「Active: inactive」や「Active: failed」と表示される場合は、cronデーモンが停止しています。以下のコマンドで起動してください。

# 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日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。