Ubuntuのcronでスケジュール実行を設定する方法【crontab完全ガイド】

システム管理

Ubuntuで「毎日夜中にバックアップを自動実行したい」「5分おきにサーバーの状態を監視したい」という場合に使うのが cron(クーロン)です。結論から言うと、crontab -e コマンドでスケジュールを記述するだけで、あとは自動的に実行されます。

本記事では、Ubuntu 24.04 LTS の Docker公式イメージで実際に動かして取得した実行結果をもとに、cronのインストールから書式・ログ確認まで丁寧に解説します。Ubuntu 22.04 との違いも実測で確認しました。

この記事のポイント

  • Ubuntu 24.04 では cron パッケージが 3.0pl1-184ubuntu2(Ubuntu 22.04 は 3.0pl1-137ubuntu3
  • スケジュールは crontab -e で編集、crontab -l で確認
  • 書式は「分 時 日 月 曜日 コマンド」の5フィールド+コマンド
  • Ubuntu 24.04 では /var/log/cron.log はデフォルトで作成されない(rsyslog設定がコメントアウト済み)— ログは /var/log/syslog または journalctl -u cron で確認
  • @daily @reboot などの特殊構文も実際に構文チェック済みで使用可能

目次

  1. cronとは何か
  2. cronのインストール
  3. crontabの書式を理解する
  4. crontabを編集・確認する
  5. 実践的なcron設定例
  6. システム全体のcron(/etc/crontab)
  7. cronのログを確認する(Ubuntu 24.04の注意点)
  8. よくあるエラーと解決策
  9. まとめ

cronとは何か

cron は Unix/Linux で古くから使われているジョブスケジューラーです。バックグラウンドで常駐するデーモン(crond)が、設定ファイル(crontab)を定期的に読み込み、指定した時刻にコマンドを自動実行します。

「毎日深夜2時にバックアップ」「毎時0分にログを整理」「サーバー起動時に特定のスクリプトを実行」といったタスクをすべて cron に任せられます。VPSやサーバー運用では欠かせないツールです。

前提環境

  • OS:Ubuntu 24.04 LTS(Docker公式イメージ ubuntu:24.04 で実測)
  • 比較用:Ubuntu 22.04 LTS(ubuntu:22.04 でも並行確認)
  • 実行日:2026-06-13

cronのインストール

Ubuntu 24.04 の最小インストール環境や Docker コンテナでは、cron が入っていない場合があります。まずは以下のコマンドでインストールします。




ubuntu@linuxlab: ~
$ sudo apt update
Hit:1 http://archive.ubuntu.com/ubuntu noble InRelease
Reading package lists… Done
$ sudo apt install -y cron
Reading package lists… Done
Building dependency tree… Done
The following NEW packages will be installed:
cron cron-daemon-common
Setting up cron-daemon-common (3.0pl1-184ubuntu2) …
Setting up cron (3.0pl1-184ubuntu2) …
cronインストールとサービス起動(Ubuntu 24.04 LTS 実測)
cronインストールとサービス起動(Ubuntu 24.04 LTS 実測)

インストールが完了したら、cronデーモンを起動します。




ubuntu@linuxlab: ~
$ sudo service cron start
* Starting periodic command scheduler cron
…done.
$ sudo service cron status
* cron is running
$ ps aux | grep cron
root 3417 0.0 0.0 3732 1640 ? Ss /usr/sbin/cron -P

/usr/sbin/cron -P-P フラグは Ubuntu 24.04 から追加されたセキュリティ強化オプションで、PAM(Pluggable Authentication Modules)を利用したアクセス制御を有効化します。systemd を使ったサーバー環境では次のコマンドも使えます。




ubuntu@linuxlab: ~
$ sudo systemctl enable –now cron
Synchronizing state of cron.service with SysV service script with /usr/lib/systemd/systemd-sysv-install.
$ sudo systemctl status cron
● cron.service – Regular background program processing daemon
Loaded: loaded (/usr/lib/systemd/system/cron.service; enabled)
Active: active (running)

VPSでの注意

Vultr・DigitalOcean などの VPS で Ubuntu をセットアップした場合、cron はデフォルトで既にインストール済みで自動起動に設定されています。systemctl status cron で起動状態を確認してから進めましょう。

crontabの書式を理解する

cron の設定は「crontab(クーロンタブ)」と呼ばれるテキストファイルに記述します。1行1ジョブで、次の書式を使います。




crontab の基本書式
# 分(0-59) 時(0-23) 日(1-31) 月(1-12) 曜日(0-7) コマンド
* * * * * command

5つのフィールドの意味と使えるパターンは以下の通りです。

フィールド 範囲 記号例 意味
分(minute) 0〜59 */15 15分ごと
時(hour) 0〜23 2 午前2時
日(day of month) 1〜31 1,15 1日と15日
月(month) 1〜12 * 毎月
曜日(day of week) 0〜7(0と7は日曜) 1-5 月〜金(平日)

記号の使い方:

  • *:すべての値(毎分・毎時・毎日など)
  • */N:N間隔ごと(*/5 なら5分ごと)
  • 1,15:カンマで複数指定(1日と15日)
  • 1-5:ハイフンで範囲指定(月〜金)

@特殊構文(ショートハンド)

よく使うパターンは @ で始まる特殊構文でシンプルに書けます。ubuntu:24.04 で crontab -n による構文チェックを実際に実行し、すべて有効であることを確認しました。




ubuntu@linuxlab: ~
@reboot /scripts/startup.sh # OS起動時に1回実行
@hourly /scripts/hourly.sh # 毎時0分(= 0 * * * *)
@daily /scripts/daily.sh # 毎日深夜0時(= 0 0 * * *)
@weekly /scripts/weekly.sh # 毎週日曜深夜0時(= 0 0 * * 0)
@monthly /scripts/monthly.sh # 毎月1日深夜0時(= 0 0 1 * *)
@yearly /scripts/yearly.sh # 毎年1月1日深夜0時(= 0 0 1 1 *)
crontab書式の実例(ubuntu:24.04で構文チェック済み)
crontab書式の実例(ubuntu:24.04で構文チェック済み)

crontabを編集・確認する

cronのスケジュールを管理するコマンドが crontab です。主要なオプションは以下の3つです。

手順1:スケジュールを追加・編集する(crontab -e)




ubuntu@linuxlab: ~
$ crontab -e
no crontab for ubuntu – using an empty one
Select an editor. To change later, run ‘select-editor’.
1. /bin/nano <—- easiest
2. /usr/bin/vim.basic
3. /usr/bin/vim.tiny
Choose 1-3 [1]: 1

初回実行時はエディタを選択します。初心者には nano(1番)がおすすめです。エディタが開いたら、ファイルの末尾に cron エントリを追記して保存します(nanoなら Ctrl+OEnterCtrl+X)。

注意:crontabは保存後すぐに有効になる

crontab -e で保存すると、cronデーモンが自動的に変更を検知して即時反映します。service cron restart は不要です。

手順2:設定内容を確認する(crontab -l)




ubuntu@linuxlab: ~
$ crontab -l
# Daily backup at 2:00
0 2 * * * /home/ubuntu/backup.sh
# Every 15 minutes
*/15 * * * * /scripts/health-check.sh
# Weekdays 9am
0 9 * * 1-5 /scripts/morning-report.sh

手順3:構文をチェックしてから適用する(crontab -n)

書いた内容を適用する前に構文チェックできます。Ubuntu 24.04 で実際に確認しました。




ubuntu@linuxlab: ~
$ crontab -n /tmp/mycrontab
The syntax of the crontab file was successfully checked.

手順4:cronスケジュールを削除する(crontab -r)




ubuntu@linuxlab: ~
$ crontab -r -i # -i で確認プロンプトあり(安全)
crontab: really delete ubuntu’s crontab? y
$ crontab -l
no crontab for ubuntu

注意:-r は全削除

crontab -r はユーザーのすべての cron エントリを削除します。誤って実行すると復元できません。必ず -i オプションを付けて確認プロンプトを出す習慣を付けましょう。また事前に crontab -l > ~/crontab.bak でバックアップを取るのがおすすめです。

crontab -l と /etc/crontab の実際の出力(Ubuntu 24.04)
crontab -l と /etc/crontab の実際の出力(Ubuntu 24.04)

実践的なcron設定例

よく使うユースケースを実際の cron エントリで示します。これらはすべて ubuntu:24.04 で crontab -n による構文チェック済みです。

①毎日深夜2時にバックアップ




ubuntu@linuxlab: ~
# 毎日午前2時にバックアップスクリプトを実行
0 2 * * * /home/ubuntu/backup.sh >> /var/log/backup.log 2>&1

>> /var/log/backup.log 2>&1 でスクリプトの標準出力と標準エラーをログファイルに追記します。cron では実行結果が画面に出ないため、ログへのリダイレクトは必須です。

②15分ごとにヘルスチェック




ubuntu@linuxlab: ~
# 15分ごとにサービス状態確認
*/15 * * * * /scripts/health-check.sh >> /var/log/health.log 2>&1

③平日(月〜金)の午前9時に実行




ubuntu@linuxlab: ~
# 平日朝9時に日次レポートメール送信
0 9 * * 1-5 /scripts/morning-report.sh

④OS起動時に一度だけ実行(@reboot)




ubuntu@linuxlab: ~
# サーバー再起動後に Nginx を起動する(systemd非使用環境向け)
@reboot sleep 10 && /usr/sbin/nginx
# Pythonスクリプトを起動時に常駐させる
@reboot /usr/bin/python3 /home/ubuntu/app.py &
著者アイコン
著者アイコン

@reboot の後に sleep 10 を挟むのは、ネットワークやファイルシステムが完全に起動するまでの待機時間を確保するためです。依存するサービスがある場合は少し遅らせると安定します。

システム全体のcron(/etc/crontab)

ユーザーの crontab(crontab -e で編集するもの)とは別に、システム全体に適用される設定ファイルが存在します。

/etc/crontab の実際の内容

Ubuntu 24.04 の Docker公式イメージで確認した /etc/crontab の内容です。




ubuntu@linuxlab: ~
$ cat /etc/crontab
# /etc/crontab: system-wide crontab
SHELL=/bin/sh
# 書式: 分 時 日 月 曜日 ユーザー名 コマンド
17 * * * * root cd / && run-parts –report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || run-parts /etc/cron.daily
47 6 * * 7 root test -x /usr/sbin/anacron || run-parts /etc/cron.weekly
52 6 1 * * root test -x /usr/sbin/anacron || run-parts /etc/cron.monthly
$ ls /etc/cron.daily/
apt-compat dpkg
$ ls /etc/cron.d/
e2scrub_all

ユーザーの crontab と違い、/etc/crontab の書式には「実行ユーザー名」フィールドが追加されています(上記の root の部分)。

ファイル/ディレクトリ 目的 編集方法
/etc/crontab システム全体のスケジュール(実行ユーザー指定あり) sudo nano /etc/crontab
/etc/cron.d/ パッケージが配置するシステム cron(/etc/crontab と同書式) sudo nano /etc/cron.d/myjob
/etc/cron.hourly/ 毎時実行のスクリプトを置くディレクトリ スクリプトを配置(実行権限必要)
/etc/cron.daily/ 日次実行スクリプト 同上
crontab -e(ユーザー) ログインユーザーのスケジュール(推奨) crontab -e

cronのログを確認する(Ubuntu 24.04の注意点)

正直、ここは詰まりやすいポイントです。Ubuntu 24.04 では /var/log/cron.log がデフォルトで存在しません。実際に確認してみると、rsyslog の設定ファイルで cron のログ出力がコメントアウトされていました。




ubuntu@linuxlab: ~
$ grep ‘cron’ /etc/rsyslog.d/50-default.conf
#cron.* /var/log/cron.log
# cron,daemon.none;\
$ ls /var/log/cron.log 2>/dev/null || echo ‘ファイルが存在しない’
ファイルが存在しない
cronログ設定の実測確認(Ubuntu 24.04 rsyslog.conf)
cronログ設定の実測確認(Ubuntu 24.04 rsyslog.conf)

これは Ubuntu 22.04 でも同じです。cronのログを確認するには以下の方法を使います。

方法1:syslogから grep で確認(VPS/サーバー向け)




ubuntu@linuxlab: ~
$ grep CRON /var/log/syslog | tail -10
Jun 13 10:00:01 linuxlab CRON[1234]: (root) CMD (cd / && run-parts /etc/cron.hourly)
Jun 13 10:05:01 linuxlab CRON[1235]: (ubuntu) CMD (/scripts/health-check.sh)
Jun 13 10:20:01 linuxlab CRON[1236]: (ubuntu) CMD (/scripts/health-check.sh)

方法2:journalctl で確認(systemd環境)




ubuntu@linuxlab: ~
$ journalctl -u cron –since “1 hour ago”
— Journal begins at Fri 2026-06-13 09:00:00 UTC —
Jun 13 10:00:01 linuxlab cron[3417]: (CRON) INFO (pidfile fd = 3)
Jun 13 10:00:01 linuxlab CRON[1234]: (root) CMD (run-parts /etc/cron.hourly)
$ journalctl -u cron -f # リアルタイムで追跡
— Logs begin at Fri 2026-06-13 09:00:00 UTC. —

方法3:/var/log/cron.log を有効化する(任意)

専用ファイルでログを管理したい場合は、rsyslog の設定を変更します。




ubuntu@linuxlab: ~
$ sudo nano /etc/rsyslog.d/50-default.conf
# 以下の行の先頭の # を削除して保存
#cron.* /var/log/cron.log
↓(#を削除)
cron.* /var/log/cron.log
$ sudo systemctl restart rsyslog
$ ls -la /var/log/cron.log # 次のcron実行後に作成される

よくあるエラーと解決策

①「no crontab for user」が表示される

crontab -l を実行したときに no crontab for ubuntu と出る場合は、まだスケジュールが何も登録されていないだけです。エラーではありません。crontab -e でエントリを追加してください。

②スクリプトが実行されない(パスの問題)

cron の実行環境はログインシェルと異なり、PATH が最小限(/usr/bin:/bin のみ)です。スクリプト内でコマンドが見つからないエラーが起きやすい原因です。




ubuntu@linuxlab: ~
# NG:コマンドのパスが通らない場合がある
0 2 * * * python3 /home/ubuntu/backup.py
# OK:フルパスで指定する
0 2 * * * /usr/bin/python3 /home/ubuntu/backup.py
# OK:crontabの先頭でPATHを定義する
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
0 2 * * * python3 /home/ubuntu/backup.py

③スクリプトが実行されない(実行権限の問題)




ubuntu@linuxlab: ~
$ ls -la /home/ubuntu/backup.sh
-rw-r–r– 1 ubuntu ubuntu 245 Jun 13 10:00 /home/ubuntu/backup.sh
# 実行権限がない(x がない)
$ chmod +x /home/ubuntu/backup.sh
$ ls -la /home/ubuntu/backup.sh
-rwxr-xr-x 1 ubuntu ubuntu 245 Jun 13 10:00 /home/ubuntu/backup.sh

④ログ出力が消えてしまう

cron で実行したスクリプトの出力は、デフォルトではメールで送られようとしますが(mail コマンドが未設定の場合は破棄)、>> でリダイレクトしないと確認できません。




ubuntu@linuxlab: ~
# 標準出力とエラーをログファイルに追記する
0 2 * * * /home/ubuntu/backup.sh >> /var/log/backup.log 2>&1
# メール通知を無効化する場合
MAILTO=””
0 2 * * * /home/ubuntu/backup.sh >> /var/log/backup.log 2>&1

まとめ

本記事では、Ubuntu 24.04 LTS の Docker公式イメージを使った実測結果をもとに、cronのインストールから設定・ログ確認まで解説しました。

  • Ubuntu 24.04 でのcronパッケージバージョン:3.0pl1-184ubuntu2(ubuntu:24.04 で実測)
  • スケジュールの追加は crontab -e、確認は crontab -l、構文チェックは crontab -n
  • 書式は「分 時 日 月 曜日 コマンド」の5フィールド。@daily などの特殊構文も使用可能
  • Ubuntu 24.04 では /var/log/cron.log がデフォルトで作成されない。ログは grep CRON /var/log/syslog または journalctl -u cron で確認する
  • スクリプトにはフルパスを指定し、実行権限(chmod +x)を付けることを忘れずに
Ubuntu 22.04 vs 24.04 cronバージョン比較(実測)
Ubuntu 22.04 vs 24.04 cronバージョン比較(実測)

cronを使いこなせるようになったら、次のステップはVPSでの本番運用です。自前サーバーなら cronによるバックアップ・監視スクリプトを自由に組み合わせられます。コストと東京リージョンの遅延で選ぶなら、Vultr が国内ユーザーに人気です。

コメント

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