crontabコマンドの設定と書き方|動かない時のログ確認までコマンド

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxコマンド, LinuxコマンドA-E, プロセス管理コマンド > crontabコマンドの設定と書き方|動かない時のログ確認までコマンド
「手動で叩くと動くのに、cronに登録すると動かない」
「夜中にバックアップを取りたいけど、書き方が合っているか不安」
Linuxサーバーの自動化において、避けては通れないのがこの crontab(クーロンタブ)です。

この記事では、定期的にコマンドを自動実行する crontab の設定方法を解説します。基本的な書き方はもちろん、現場で必ずハマる「環境変数の罠」や「ログの確認方法」まで、実務で困らないための鉄則をまとめました。

【この記事でわかること】 ・crontabの編集・確認・削除コマンド(-e/-l/-r)の使い分け
・「分 時 日 月 曜日 コマンド」の5フィールドの書き方とよく使うパターン
・動かない時の4大原因(絶対パス・環境変数・実行権限・ログ)
・systemd時代の確認方法(systemctl status crond / journalctl -u crond -f)
・/etc/cron.d/・/etc/crontab・ユーザーcrontabの棲み分け

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

※本記事はsystemd前提(cron / crond サービスがsystemdユニットとして稼働)で記述しています。CentOS Stream 9 / Rocky Linux 9 / RHEL 9 / Ubuntu 22.04 LTS / 24.04 LTS で動作確認できる内容です。

1. crontabの基本コマンド(編集・表示・削除)

crontabの設定は、専用のコマンドを使って行います。直接ファイル(/var/spool/cron/など)を編集するのはご法度です。

設定を編集する: -e

# crontab -e

このコマンドを叩くと、viなどのエディタが開き、設定を記述できます。保存して終了すると、自動的に設定が反映されます。

設定を表示する: -l

現在登録されている内容を確認するには -l(list)オプションを使います。

# crontab -l 0 4 * * * /root/backup.sh

設定を全削除する: -r(要注意)

-r(remove)オプションは、登録されているすべての crontab 設定を確認なしに即削除します。-e と打ち間違えると取り返しがつかないため、現場では使用を避けてバックアップを取ってから削除するのが鉄則です。
(下記コマンドの実行前に必ずバックアップを取りましょう)

# crontab -l > ~/crontab_backup.txt # crontab -r

2. スケジュールの書き方(5つの星の意味)

crontabには、左から順に「分・時・日・月・曜日」を指定し、最後に「実行したいコマンド」を書きます。

書式: 分 時 日 月 曜日 コマンド

項目 設定できる値 意味
0~59 何分に実行するか
0~23 何時に実行するか
1~31 何日に実行するか
1~12 何月に実行するか
曜日 0~7 0と7は日曜日、1は月曜日...

よく使う設定例

毎日 朝4:00に実行:0 4 * * * /path/to/script.sh
毎時 0分に実行(1時間に1回):0 * * * * /path/to/script.sh
平日(月~金)の12:30に実行:30 12 * * 1-5 /path/to/script.sh
5分ごとに実行:*/5 * * * * /path/to/script.sh

3. 【現場の鉄則】cronが動かない時の4大原因と対策

「設定したのに動かない!」というトラブルのほぼ全ては、以下の4つが原因です。

① コマンドは必ず「絶対パス」で書く

cronで実行される環境では、普段あなたがログインしている時のような PATH(パス)が通っていません。そのため、pythonbackup.sh とだけ書いても「そんなコマンドは見つかりません」とエラーになります。

× ダメな例:0 4 * * * python script.py
○ 正解の例:0 4 * * * /usr/bin/python3 /home/user/script.py

コマンドもスクリプトも、すべて / から始まる絶対パスで書くのが鉄則です。

② 環境変数が引き継がれない

cronが実行される環境は、ログイン時のシェルとは別の「最小限の環境」です。PATH だけでなく、JAVA_HOMELANG(文字コード)などの環境変数も引き継がれません。

スクリプトが文字化けしたり、Javaコマンドが見つからないといったトラブルの多くは、crontabの冒頭に必要な環境変数を直接記述することで解決できます。

# crontab -e で設定ファイルの冒頭に環境変数を記述する LANG=ja_JP.UTF-8 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 0 4 * * * /root/backup.sh

③ 実行権限を確認する

実行したいスクリプト自体に「実行権限」がないと、cronは起動に失敗します。

# chmod +x /home/user/script.sh

必ず chmod +x で実行権限を付与しておきましょう。

④ ログファイル(/var/log/cron)を確認する

動かない時は、悩む前にログを見ましょう。cronの実行履歴は /var/log/cron に出力されます。

# tail -f /var/log/cron Feb 24 10:00:01 server CROND[1234]: (root) CMD (/root/backup.sh)

ここにログが出ていなければ、そもそもcron自体が動いていない可能性があります。その場合は systemctl status crond(Ubuntu/Debian系は systemctl status cron)でサービスの状態を確認してください。
※また、Ubuntu/Debian系では実行ログも /var/log/cron ではなく /var/log/syslog に出力されます。

ログエントリの読み方

/var/log/cron の各行は、以下のフィールドで構成されています。

出力例:

Mar 26 10:00:01 web01 CROND[3692]: (root) CMD (/usr/lib64/sa/sa1 1 1) Mar 26 10:01:01 web01 CROND[3715]: (root) CMD (run-parts /etc/cron.hourly) Mar 26 10:05:01 web01 CROND[3801]: (webadmin) CMD (/home/webadmin/backup.sh)

フィールド 意味
日付・時刻 Mar 26 10:00:01 ジョブが実行された日時
ホスト名 web01 実行されたサーバーのホスト名
プロセス情報 CROND[3692] cronデーモンのプロセスID
実行ユーザー (root) そのジョブを実行したユーザー
実行コマンド CMD (/usr/lib64/sa/sa1 1 1) 実際に実行されたコマンド
ログに自分が設定したコマンドが表示されていれば、cronは正常に動作しています。表示されていなければ、スケジュールの書き方(時刻指定)かコマンドのパスを見直してください。

特定のジョブだけをログから絞り込む

/var/log/cron にはシステム全体のcronジョブが記録されるため、自分のジョブだけを確認したい場合は grep で絞り込みます。

# 特定のユーザーのジョブだけ表示 grep "(webadmin)" /var/log/cron # 特定のスクリプト名で絞り込み grep "backup.sh" /var/log/cron # 今日の実行分だけ表示(3月26日の例) grep "Mar 26" /var/log/cron # リアルタイムで監視(ジョブの実行タイミングを待つ時に便利) tail -f /var/log/cron | grep "backup.sh"

ログが出力されない場合の対処

/var/log/cron にログが出ない場合は、以下の2点を確認してください。

rsyslogの設定:cronのログ出力はrsyslogが担当しています。設定ファイルで cron.* の行が有効か確認します。

# rsyslogの設定を確認 grep cron /etc/rsyslog.conf

以下の行がコメントアウトされていなければ正常です。

cron.* /var/log/cron

コメントアウトされていた場合は、行頭の # を削除して rsyslog を再起動します。

# rsyslogを再起動してログ出力を有効化 systemctl restart rsyslog

Ubuntu/Debian系の場合:/var/log/cron ではなく /var/log/syslog に出力されます。

# Ubuntu/Debianでcronログを確認 grep CRON /var/log/syslog

4. ユーザーcrontabと /etc/cron.d / /etc/crontab の違い

cronには「ユーザーごとのcrontab」と「システム全体のcrontab」の2系統があります。現場ではこの違いを正しく押さえておくことが重要です。

ユーザーcrontab:crontab -eで編集する個人用設定。/var/spool/cron/<ユーザー名>に保存され、そのユーザー権限で実行される
/etc/crontab:システム全体のcrontab。フィールドが7つ(分 時 日 月 曜日 ユーザー名 コマンド)になり、実行ユーザーを指定できる
/etc/cron.d/:パッケージや運用スクリプトを配置するディレクトリ。1ファイル=1設定として管理しやすく、構成管理ツール(Ansible等)との相性が良い
/etc/cron.{hourly,daily,weekly,monthly}/:シンプルな定期スクリプトを置くだけで自動実行されるディレクトリ。実行時刻はanacronまたはrun-partsで制御される

本番運用では、パッケージ由来の設定は/etc/cron.d/、運用ジョブは/etc/cron.d/または/etc/crontab、個人ジョブのみユーザーcrontabという棲み分けが定番です。

journalctlでcronログを追う(systemd時代の定番)

rsyslog経由の/var/log/cronだけでなく、systemdジャーナルからもcronの実行履歴を直接追えます。Ubuntuなど/var/log/cronが無い環境ではこちらが便利です。

# crondサービスのログだけを最新20件表示 $ journalctl -u crond -n 20 --no-pager # リアルタイム追跡(実行タイミングを待つ時に便利) $ journalctl -u crond -f # Ubuntu/Debian系 $ journalctl -u cron -f

本記事のまとめ

やりたいこと コマンド・書き方
設定を編集する crontab -e
設定を確認する crontab -l
設定を全削除する(必ずバックアップ後に実行!) crontab -r
特定のユーザーの設定を編集 crontab -u ユーザー名 -e
実行ログを確認する(RHEL系) tail -f /var/log/cron
実行ログを確認する(Ubuntu/Debian系) tail -f /var/log/syslog
サービスの稼働確認 systemctl status crond(Ubuntu系は cron

crontabが動かない原因を自分で特定して直せていますか?

コマンドの使い方を一つひとつ覚えていくのは時間がかかります。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。

「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。

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

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

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

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

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

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

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

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

この記事を書いた人

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

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

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