「cronを設定したのに、動いているか分からない…」 「ジョブが実行されたか確認したいけど、方法が分からない」
そんな悩み、よく分かります!
cron(クーロン)は、Linuxで定期的な処理を自動実行してくれる便利な機能です。 でも、画面に何も表示されないので、ちゃんと動いているか不安になりますよね。
実は、cronの動作確認にはいくつもの方法があるんです。 ログを見たり、設定を確認したり、テスト実行したり…
今回は、cronの確認方法を完全網羅します! この記事を読めば、もう「動いてるかな?」と心配する必要はありません。
1. そもそもcronって何?基本をサクッとおさらい

cronは「時間になったら自動実行」してくれる執事
cronとは: 指定した時間に、指定したコマンドやスクリプトを自動実行してくれるLinuxの機能です。
例えばこんなことができます:
- 毎朝9時にバックアップを取る
- 毎週月曜日にログファイルを削除
- 5分ごとにサーバーの状態をチェック
- 毎月1日にレポートをメール送信
まるで優秀な執事が、時間通りに仕事をこなしてくれるイメージです。
cronの構成要素
覚えておくべき3つの要素:
- crontab(クーロンタブ) – 設定ファイル
- crond(クーロンデーモン) – 実行役のプログラム
- cronジョブ – 実行される個々のタスク
これらがちゃんと動いているか、順番に確認していきましょう!
2. 現在の設定を確認する方法
自分のcrontab設定を見る
基本コマンド:
crontab -l
これで現在設定されているcronジョブが一覧表示されます。
何も表示されない場合:
no crontab for ユーザー名
と出たら、まだ何も設定されていません。
他のユーザーのcrontab確認(管理者のみ)
rootユーザーで実行:
sudo crontab -u ユーザー名 -l
全ユーザーの設定を一気に確認:
for user in $(cut -f1 -d: /etc/passwd); do
echo "=== $user のcrontab ==="
sudo crontab -u $user -l 2>/dev/null
done
システム全体のcron設定
システムcronの確認場所:
# メインの設定ファイル
cat /etc/crontab
# 時間別の設定
ls -la /etc/cron.hourly/
# 日次の設定
ls -la /etc/cron.daily/
# 週次の設定
ls -la /etc/cron.weekly/
# 月次の設定
ls -la /etc/cron.monthly/
# 個別設定ファイル
ls -la /etc/cron.d/
anacronの設定も忘れずに:
cat /etc/anacrontab
(anacronは、電源が切れていた時の処理を後から実行してくれる機能です)
3. cronが動いているか確認する方法
cronデーモンの稼働状況をチェック
Ubuntu/Debian系:
systemctl status cron
CentOS/RedHat系:
systemctl status crond
正常に動いている場合の表示:
● cron.service - Regular background program processing daemon
Loaded: loaded
Active: active (running) ← これが重要!
古いシステムの場合:
service cron status
# または
/etc/init.d/cron status
プロセスを直接確認
ps aux | grep cron
表示例:
root 1234 0.0 0.0 12345 6789 ? Ss 09:00 0:00 /usr/sbin/cron
これが表示されれば、cronは動いています!
4. 実行ログを確認する方法
標準的なログファイルの場所
Ubuntu/Debian系:
# cronの実行ログ
grep CRON /var/log/syslog
# 今日の分だけ見る
grep CRON /var/log/syslog | grep "$(date '+%b %d')"
# リアルタイムで監視
tail -f /var/log/syslog | grep CRON
CentOS/RedHat系:
# cronログ専用ファイル
tail -f /var/log/cron
# 特定の日付を確認
grep "Dec 25" /var/log/cron
# 最新100行を表示
tail -n 100 /var/log/cron
ログの見方と意味
正常実行の例:
Dec 25 10:00:01 server CRON[12345]: (root) CMD (/usr/local/bin/backup.sh)
意味:
Dec 25 10:00:01
– 実行日時server
– ホスト名CRON[12345]
– プロセスID(root)
– 実行ユーザーCMD (...)
– 実行されたコマンド
エラーの例:
Dec 25 10:00:01 server CRON[12345]: (CRON) error (can't fork)
これはシステムリソース不足のサインです。
journalctlを使った確認(systemd環境)
最新のログ確認:
journalctl -u cron -n 50
特定期間のログ:
# 今日のログ
journalctl -u cron --since today
# 1時間前から現在まで
journalctl -u cron --since "1 hour ago"
# リアルタイム監視
journalctl -u cron -f
5. cronが動かない時のトラブルシューティング

よくある原因と解決方法
1. パスが通っていない
問題: コマンドラインでは動くのに、cronでは動かない
解決: フルパスで記述する
# NG
* * * * * backup.sh
# OK
* * * * * /usr/local/bin/backup.sh
または、PATHを設定:
PATH=/usr/local/bin:/usr/bin:/bin
* * * * * backup.sh
2. 環境変数が設定されていない
crontabの先頭に追加:
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=your-email@example.com
HOME=/home/username
3. 権限の問題
実行権限を確認:
ls -l /path/to/script.sh
# 実行権限がなければ付与
chmod +x /path/to/script.sh
4. 改行がない
crontabの最後には必ず改行を入れてください! これ、意外と忘れがちです。
デバッグ用の設定
実行結果をファイルに保存:
* * * * * /path/to/script.sh >> /tmp/cron_debug.log 2>&1
メールで通知を受け取る:
MAILTO=your-email@example.com
* * * * * /path/to/script.sh
実行開始と終了を記録:
* * * * * echo "開始: $(date)" >> /tmp/cron.log && /path/to/script.sh && echo "終了: $(date)" >> /tmp/cron.log
6. 便利な確認コマンド集
次回実行時刻を確認
cronの設定をテスト:
# crontab形式が正しいか確認
echo "0 3 * * * /path/to/script.sh" | crontab -
crontab -l
直近の実行を確認
最後に実行された時刻:
# システムログから最新の実行を抽出
grep CRON /var/log/syslog | tail -5
cron設定の文法チェック
設定前にテスト:
# 一時ファイルで確認
crontab -l > /tmp/mycron
echo "* * * * * /path/to/script.sh" >> /tmp/mycron
crontab /tmp/mycron
実行予定の確認スクリプト
#!/bin/bash
# cron_checker.sh として保存
echo "=== Cron Service Status ==="
systemctl status cron | head -10
echo -e "\n=== Your Crontab ==="
crontab -l
echo -e "\n=== Recent Executions ==="
grep CRON /var/log/syslog | tail -5
echo -e "\n=== Next Scheduled Run ==="
# ここは手動で計算が必要
echo "現在時刻: $(date)"
7. cron設定のベストプラクティス
ログを必ず残す
推奨設定:
# ログディレクトリを作成
mkdir -p /var/log/mycron
# crontabに設定
* * * * * /path/to/script.sh >> /var/log/mycron/script.log 2>&1
テスト方法
本番前に必ずテスト:
- 手動実行でテスト
/path/to/script.sh
- 1分ごとに実行して確認
* * * * * /path/to/script.sh >> /tmp/test.log 2>&1
- 確認後、本番の時間に変更
0 3 * * * /path/to/script.sh >> /var/log/script.log 2>&1
監視の自動化
実行確認スクリプト:
#!/bin/bash
# cron_monitor.sh
LOGFILE="/var/log/cron_monitor.log"
EXPECTED_PATTERN="backup.sh"
# 1時間以内に実行されたか確認
if grep -q "$EXPECTED_PATTERN" /var/log/syslog; then
echo "$(date): Cron job実行確認OK" >> $LOGFILE
else
echo "$(date): 警告!Cron jobが実行されていません" >> $LOGFILE
# メール通知などを追加可能
fi
8. よくある質問と回答
Q: cronとsystemd timerはどっちを使うべき?
A: 新しいシステムならsystemd timerがおすすめです
systemd timerの確認方法:
systemctl list-timers
ただし、cronの方がシンプルで分かりやすいので、簡単な定期実行ならcronでOKです。
Q: cronが動いたか確認する一番簡単な方法は?
A: ログファイルに出力させることです
* * * * * date >> /tmp/cron_test.log
これで/tmp/cron_test.logを見れば一目瞭然!
Q: rootのcronが動かない
A: SELinuxが原因かもしれません
確認方法:
getenforce
# Enforcingなら一時的に無効化してテスト
sudo setenforce 0
Q: cronの実行時間がずれる
A: タイムゾーンを確認してください
# システムのタイムゾーン確認
timedatectl
# cronのタイムゾーン設定
crontab -e
# 先頭に追加
TZ=Asia/Tokyo
まとめ:もうcronの動作確認で悩まない!
cronの確認方法、マスターできましたか?
重要なポイントをおさらい:
✅ 設定確認は crontab -l
✅ 動作確認は systemctl status cron
✅ ログ確認は /var/log/syslog
か /var/log/cron
✅ トラブル時はフルパスと環境変数をチェック ✅ 必ずログ出力を設定する
今すぐできる3つのアクション:
- 現在の設定を確認
crontab -l
- 最近の実行ログをチェック
grep CRON /var/log/syslog | tail -10
- テスト用cronを設定
* * * * * echo "cron test: $(date)" >> /tmp/test.log
これで、cronが正常に動いているか、いつでも確認できるようになりました!
定期的な作業の自動化は、システム管理の基本中の基本。 cronを使いこなして、楽をしながら確実な運用を実現しましょう!
困ったときは、この記事に戻ってきてくださいね。 Happy Cron Life! 🎯
コメント