Linuxのcron(クーロン)確認方法完全ガイド:設定から動作チェックまで徹底解説

Linux

「cronを設定したのに、動いているか分からない…」 「ジョブが実行されたか確認したいけど、方法が分からない」

そんな悩み、よく分かります!

cron(クーロン)は、Linuxで定期的な処理を自動実行してくれる便利な機能です。 でも、画面に何も表示されないので、ちゃんと動いているか不安になりますよね。

実は、cronの動作確認にはいくつもの方法があるんです。 ログを見たり、設定を確認したり、テスト実行したり…

今回は、cronの確認方法を完全網羅します! この記事を読めば、もう「動いてるかな?」と心配する必要はありません。


スポンサーリンク

1. そもそもcronって何?基本をサクッとおさらい

cronは「時間になったら自動実行」してくれる執事

cronとは: 指定した時間に、指定したコマンドやスクリプトを自動実行してくれるLinuxの機能です。

例えばこんなことができます:

  • 毎朝9時にバックアップを取る
  • 毎週月曜日にログファイルを削除
  • 5分ごとにサーバーの状態をチェック
  • 毎月1日にレポートをメール送信

まるで優秀な執事が、時間通りに仕事をこなしてくれるイメージです。

cronの構成要素

覚えておくべき3つの要素:

  1. crontab(クーロンタブ) – 設定ファイル
  2. crond(クーロンデーモン) – 実行役のプログラム
  3. 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

テスト方法

本番前に必ずテスト:

  1. 手動実行でテスト
/path/to/script.sh
  1. 1分ごとに実行して確認
* * * * * /path/to/script.sh >> /tmp/test.log 2>&1
  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つのアクション:

  1. 現在の設定を確認 crontab -l
  2. 最近の実行ログをチェック grep CRON /var/log/syslog | tail -10
  3. テスト用cronを設定 * * * * * echo "cron test: $(date)" >> /tmp/test.log

これで、cronが正常に動いているか、いつでも確認できるようになりました!

定期的な作業の自動化は、システム管理の基本中の基本。 cronを使いこなして、楽をしながら確実な運用を実現しましょう!

困ったときは、この記事に戻ってきてくださいね。 Happy Cron Life! 🎯

コメント

タイトルとURLをコピーしました