cronの使い方完全ガイド【2026年版】

cronの使い方完全ガイド【2026年版】
Linux/Unixシステムで定期的なタスクを自動実行するには、cronを活用するのが最も効率的な方法です。システム管理者から開発者、さらには個人ユーザーまで幅広く利用されるcronは、バッチ処理やログローテーション、バックアップなど、日常的な運用業務を支える基盤技術です。本ガイドでは、cronの基本概念から実践的な設定方法、トラブルシューティング、セキュリティ対策まで、2026年現在の最新情報を網羅的に解説します。初心者でも理解できるように、具体的なコマンド例や実務で役立つ設定パターンを豊富に紹介しますので、ぜひ最後までお読みください。
目次
- cronとは何か?基本概念を理解する
- cronとanacronの違い:システム起動時実行が必要な場合
- crontabの書式と5つの時間指定フィールド
- cronのインストールと基本設定
- crontabコマンド完全マスター:編集・一覧・削除
- 実務で使えるcron設定10選:バックアップ・ログ管理・監視
- cron環境変数の扱い方:PATHやSHELL設定の落とし穴
- cronジョブのログ管理:標準出力・エラーの記録方法
- cronのセキュリティベストプラクティス:権限・実行ユーザー・監査
- cronトラブルシューティング:ジョブが実行されない原因と対策
- cronの代替ツール:systemd timers・atコマンド・クラウドサービス
- まとめ:cronをマスターして運用効率を劇的に向上させよう
cronとは何か?基本概念を理解する
cronは、Unix系OS(Linux・macOS・BSDなど)に標準搭載されている時間ベースのジョブスケジューラです。システム管理者が定期的に実行する必要があるタスク(バックアップ・ログローテーション・システムメンテナンスなど)を自動化するためのツールです。cronの最大の特徴は、システムの起動時に自動的に開始され、バックグラウンドで常駐し続ける点にあります。
cronの仕組みは以下のように動作します:
- cronデーモン(crond):システム起動時に起動するバックグラウンドプロセス
- crontabファイル:各ユーザーが管理するジョブ設定ファイル
- cronジョブ:実行したいコマンドやスクリプトを定義したエントリ
cronは、システム全体のジョブを管理する/etc/crontabと、各ユーザー固有のジョブを管理するcrontabコマンドで操作する個人用ジョブの2種類に分類されます。一般ユーザーは通常、個人用のcrontabを使用しますが、システム管理者はシステム全体のジョブを/etc/crontabで管理します。
cronの歴史は古く、1970年代にAT&TのUnixシステムで開発されました。その後、POSIX規格に取り込まれ、現在ではほとんどのUnix系OSで標準的に利用されています。2026年現在でも、クラウド環境やコンテナ化されたシステムにおいても、cronは基盤技術として重要な役割を果たしています。
cronとanacronの違い:システム起動時実行が必要な場合
cronは定期的なジョブ実行に最適ですが、システムが常時稼働していない環境(ノートPC・ラップトップ・仮想マシンのシャットダウンが頻繁な環境)では、ジョブが実行されないという問題があります。このような環境では、anacronという代替ツールが有効です。
anacronは、システムが起動した際に「最後に実行されてからどれくらい時間が経過したか」を考慮してジョブを実行します。つまり、cronが「毎日3時に実行」という設定であっても、システムが3時に起動していなかった場合、anacronはシステム起動時にジョブを実行します。
| 機能 | cron | anacron |
|---|---|---|
| 実行タイミング | 厳密な時刻(例:毎日3:00) | システム起動時(最後に実行されてから一定期間経過していた場合) |
| 対象システム | 常時稼働するサーバー | ノートPC・ラップトップ・シャットダウンが頻繁な環境 |
| 設定ファイル | /etc/crontab・crontab -e | /etc/anacrontab |
| 時間指定精度 | 分単位まで正確 | 日単位・週単位・月単位 |
| 同時実行 | 同一時刻に複数ジョブ実行可能 | 同時実行は制限される |
anacronを使用するには、通常のcronと同様にパッケージをインストールします。Ubuntu/Debian系では以下のコマンドでインストールできます:
sudo apt update
sudo apt install anacron
anacronの設定ファイルは/etc/anacrontabにあり、以下のような形式でジョブを定義します:
# period delay job-identifier command
1 5 cron.daily nice run-parts --report /etc/cron.daily
7 10 cron.weekly nice run-parts --report /etc/cron.weekly
30 15 cron.monthly nice run-parts --report /etc/cron.monthly
この設定では、1日ごと・1週間ごと・1ヶ月ごとにジョブが実行されます。periodは実行間隔(日数)、delayはシステム起動後の待機時間(分)、job-identifierはジョブを識別する名前、commandは実行するコマンドです。
cronとanacronを併用することで、常時稼働するサーバーとノートPCの両方で効率的にジョブを管理できます。特に、ハイブリッド環境(サーバーとラップトップの両方を使用する場合)では、両方のツールを使い分けることが推奨されます。
crontabの書式と5つの時間指定フィールド
crontabファイルの書式は、5つの時間指定フィールドと実行コマンドで構成されます。この書式を理解することが、cronを効果的に活用する第一歩です。
基本的なcrontabの書式は以下の通りです:
* * * * * command_to_execute
各*は時間指定フィールドを表し、左から順に以下の意味を持ちます:
| フィールド | 位置 | 有効な値 | 説明 | 例 |
|---|---|---|---|---|
| 分(Minute) | 1番目 | 0-59 | 実行する分を指定 | 30 → 30分 |
| 時(Hour) | 2番目 | 0-23 | 実行する時を指定 | 14 → 午後2時 |
| 日(Day of Month) | 3番目 | 1-31 | 実行する日の指定 | 15 → 毎月15日 |
| 月(Month) | 4番目 | 1-12(またはjan-dec) | 実行する月を指定 | */2 → 2ヶ月ごと |
| 曜日(Day of Week) | 5番目 | 0-7(0と7は日曜、1-6は月曜-土曜) | 実行する曜日を指定 | 1-5 → 月曜から金曜 |
各フィールドには、以下のような特殊文字を使用できます:
- *:全ての値(例:
* * * * *→ 毎分実行) - ,:複数の値を指定(例:
0,15,30,45 * * * *→ 0分・15分・30分・45分に実行) - –:範囲を指定(例:
0 9-17 * * 1-5→ 月曜から金曜の9時から17時まで毎時0分に実行) - /:間隔を指定(例:
*/5 * * * *→ 5分ごとに実行) - L:最後の日(例:
L * * * *→ 毎月の最終日に実行) - W:最も近い平日(例:
15W * * * *→ 15日の最も近い平日に実行) - #:n番目の曜日(例:
1#2 * * * *→ 月の第2月曜日に実行)
具体的な設定例を見てみましょう:
| 設定例 | 説明 |
|---|---|
0 3 * * * /usr/bin/backup.sh | 毎日午前3時にバックアップスクリプトを実行 |
*/15 * * * * /usr/bin/check_status.sh | 15分ごとにステータスチェックスクリプトを実行 |
0 9-17 * * 1-5 /usr/bin/monitor.sh | 月曜から金曜の9時から17時まで毎時0分にモニタリングスクリプトを実行 |
0 0 1 * * /usr/bin/rotate_logs.sh | 毎月1日の午前0時にログローテーションを実行 |
30 2 * * 0 /usr/bin/cleanup.sh | 毎週日曜日の午前2時30分にクリーニングスクリプトを実行 |
crontabファイルを編集する際には、以下の点に注意してください:
- コメント行は
#で始める - コマンドはフルパスで指定する(
PATH環境変数がcronでは正しく設定されないため) - 改行コードはLF(Unix形式)を使用する
- ジョブが実行されるユーザーの権限で実行される
crontabの書式をマスターすることで、柔軟なジョブスケジューリングが可能になります。特に、複雑なスケジュール(例:毎月第2火曜日の午後3時)を正確に設定するには、特殊文字の組み合わせを理解することが重要です。
cronのインストールと基本設定
ほとんどのLinuxディストリビューションでは、cronはデフォルトでインストールされています。しかし、一部の軽量ディストリビューション(例:Alpine Linux)や特定の環境では、明示的にインストールする必要があります。また、cronの動作をカスタマイズするための基本設定も重要です。
cronのインストール方法
主要なLinuxディストリビューションごとのインストール方法は以下の通りです:
| ディストリビューション | パッケージ名 | インストールコマンド | 備考 |
|---|---|---|---|
| Ubuntu/Debian | cron | sudo apt update && sudo apt install cron | デフォルトでインストールされている場合が多い |
| CentOS/RHEL/Rocky Linux | cronie | sudo dnf install cronie | CentOS 7以降で使用 |
| Fedora | cronie | sudo dnf install cronie | |
| openSUSE | cron | sudo zypper install cron | |
| Alpine Linux | dcron | apk add dcron | 軽量版cron |
| Arch Linux | cronie | sudo pacman -S cronie |
インストール後、cronサービスを起動し、システム起動時に自動起動するように設定します:
# Ubuntu/Debian
sudo systemctl enable cron
sudo systemctl start cron
CentOS/RHEL/Rocky Linux
sudo systemctl enable crond
sudo systemctl start crond
cronサービスが正常に起動しているか確認するには、以下のコマンドを実行します:
sudo systemctl status cron # Ubuntu/Debian
sudo systemctl status crond # CentOS/RHEL/Rocky Linux
cronサービスが起動していない場合は、ログを確認してトラブルシューティングを行います:
sudo journalctl -u cron -f # Ubuntu/Debian
sudo journalctl -u crond -f # CentOS/RHEL/Rocky Linux
cronの基本設定
cronの動作をカスタマイズするための主な設定ファイルは以下の通りです:
/etc/crontab:システム全体のジョブを管理するファイル/etc/cron.d/:システムジョブを個別ファイルで管理するディレクトリ/etc/cron.hourly/・/etc/cron.daily/・/etc/cron.weekly/・/etc/cron.monthly/:時間単位・日単位・週単位・月単位のジョブを格納するディレクトリ~/.crontab・crontab -e:個人ユーザーのジョブを管理するファイル
/etc/crontabの書式は、個人用crontabとは少し異なります。システム全体のジョブを管理するため、実行ユーザーを明示的に指定する必要があります:
# /etc/crontabの例
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
この設定では、rootユーザーとしてジョブが実行されます。システム管理者は、このファイルを編集してシステム全体のジョブを管理します。
個人用のcrontabを編集するには、crontab -eコマンドを使用します。このコマンドを実行すると、デフォルトのエディタ(通常はviまたはnano)が起動し、crontabファイルを編集できます。
cronの設定を変更した後は、必ずcronサービスを再読み込みすることを忘れないでください:
# Ubuntu/Debian
sudo systemctl reload cron
CentOS/RHEL/Rocky Linux
sudo systemctl reload crond
cronのインストールと基本設定が完了すれば、次は実際のジョブ設定に進むことができます。特に、システム全体のジョブを管理する/etc/crontabと、個人ユーザーのジョブを管理するcrontab -eの違いを理解しておくことが重要です。
crontabコマンド完全マスター:編集・一覧・削除
crontabコマンドは、個人用のジョブスケジュールを管理するための主要なツールです。このコマンドを使いこなすことで、ジョブの追加・編集・削除・一覧表示など、crontabファイルの操作を効率的に行うことができます。
crontabコマンドの基…
crontabコマンドには、以下の主要なオプションがあります:
| オプション | 説明 | 使用例 |
|---|---|---|
| -e | crontabファイルを編集する | crontab -e |
| -l | 現在のcrontabファイルを表示する | crontab -l |
| -r | crontabファイルを削除する | crontab -r |
| -i | 削除前に確認を求める | crontab -ri |
| -u | 指定したユーザーのcrontabを操作する | crontab -u john -e |
crontab -eコマンドを実行すると、デフォルトのテキストエディタが起動します。エディタは環境変数EDITORまたはVISUALで設定できます。例えば、nanoをデフォルトエディタに設定するには以下のコマンドを実行します:
export EDITOR=nano
crontab -e
または、永続的に設定するには、~/.bashrcまたは~/.zshrcに以下の行を追加します:
export EDITOR=nano
crontabファイルを編集する際には、以下の点に注意してください:
- ジョブは1行に1つずつ記述する
- コメント行は
#で始める - コマンドはフルパスで指定する(
PATH環境変数がcronでは正しく設定されないため) - 改行コードはLF(Unix形式)を使用する
- ジョブが実行されるユーザーの権限で実行される
crontabファイルの編集例
以下は、実際のcrontabファイルの編集例です。この例では、毎日午前3時にバックアップを実行し、15分ごとにシステムステータスをチェックするジョブを設定します:
# 毎日午前3時にバックアップを実行
0 3 * * * /usr/local/bin/backup_database.sh
15分ごとにシステムステータスをチェック
*/15 * * * * /usr/local/bin/check_system_status.sh >> /var/log/system_status.log 2>&1
毎週日曜日の午前2時にログをローテーション
0 2 * * 0 /usr/local/bin/rotate_logs.sh
毎月1日の午前1時にディスク使用量をレポート
0 1 1 * * /usr/local/bin/disk_usage_report.sh | mail -s "Disk Usage Report" admin@example.com
このcrontabファイルを編集するには、以下の手順を実行します:
crontab -eコマンドを実行し、エディタを起動- 上記の内容をファイルに追加
- 保存してエディタを終了
- cronサービスが設定を再読み込みするのを待つ(通常は即時反映)
crontabファイルの一…
現在のcrontabファイルの内容を表示するには、crontab -lコマンドを使用します:
$ crontab -l
Edit this file to introduce tasks to be run by cron.
#
Each task to run has to be defined through a single line
indicating with different fields when and how often a task should run
and what command to run for the task
#
To define the time you can provide concrete values for
minute (m), hour (h), day of month (dom), month (mon),
and day of week (dow) or use '*' in these fields (for 'any').
#
Notice that tasks will be started based on the cron's system
daemon's notion of time and timezones.
#
Output of the crontab jobs (including errors) is sent through
email to the user the crontab file belongs to (unless redirected).
#
For example, you can run a backup of all your user accounts
at 5 a.m every week with:
0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
For more information see the manual pages of crontab(5) and cron(8)
#
m h dom mon dow command
0 3 * * * /usr/local/bin/backup_database.sh
*/15 * * * * /usr/local/bin/check_system_status.sh >> /var/log/system_status.log 2>&1
0 2 * * 0 /usr/local/bin/rotate_logs.sh
0 1 1 * * /usr/local/bin/disk_usage_report.sh | mail -s "Disk Usage Report" admin@example.com
crontabファイルを削除するには、crontab -rコマンドを使用します。削除前に確認を求めるには、crontab -riを使用します:
$ crontab -ri
crontab: really delete john's crontab? (y/n) y
特定のユーザーのcrontabを操作するには、-uオプションを使用します。例えば、ユーザーjohnのcrontabを編集するには以下のコマンドを実行します:
sudo crontab -u john -e
このコマンドを実行するには、root権限が必要です。システム管理者は、この機能を使って他のユーザーのジョブを管理できます。
crontabのバックアッ…
crontabファイルをバックアップするには、以下のコマンドを使用します:
crontab -l > ~/crontab_backup.txt
バックアップしたcrontabファイルを復元するには、以下のコマンドを実行します:
crontab ~/crontab_backup.txt
また、別のユーザーのcrontabをバックアップするには、以下のコマンドを使用します:
sudo crontab -u john -l > ~/john_crontab_backup.txt
crontabコマンドを使いこなすことで、ジョブの管理がより効率的になります。特に、crontab -e・crontab -l・crontab -rの3つの基本コマンドを覚えておけば、ほとんどの操作が可能になります。
実務で使えるcron設定10選:バックアップ・ログ管理・監視
cronを実務で活用するためには、具体的な設定パターンを理解することが重要です。ここでは、実際の運用現場で頻繁に使用される10のcron設定例を紹介します。これらの設定を参考に、自分の環境に合わせてカスタマイズしてください。
1. データベースバックア…
データベースのバックアップは、システム運用において最も重要なジョブの1つです。以下の設定では、MySQLデータベースを圧縮してバックアップディレクトリに保存します:
0 3 * * * /usr/bin/mysqldump -u backup_user -p'secure_password' --all-databases | gzip > /backups/mysql/all_databases_$(date +\%Y\%m\%d).sql.gz
この設定のポイント:
mysqldumpコマンドで全データベースをダンプgzipで圧縮してファイルサイズを削減$(date +\%Y\%m\%d)で日付を含むファイル名を自動生成- バックアップファイルは
/backups/mysql/ディレクトリに保存
セキュリティ上の注意:パスワードを直接コマンドに記述するのは避け、~/.my.cnfファイルに保存してchmod 600で権限を設定してください。
2. ログローテーション(…
ログファイルが肥大化するとディスク容量を圧迫し、システムパフォーマンスに悪影響を与えます。以下の設定では、Apacheのアクセスログとエラーログをローテーションします:
0 2 * * * /usr/sbin/logrotate -f /etc/logrotate.d/apache2
この設定のポイント:
logrotateコマンドでログローテーションを実行-fオプションで強制実行/etc/logrotate.d/apache2でローテーション設定を管理
ログローテーションの設定ファイル(例:/etc/logrotate.d/apache2)は以下のようになります:
/varこの記事で学んだスキルをさらに深めたい方へ
インフラエンジニアのスキルアップに役立つ技術書です。Amazonで探してみましょう。
Amazonアソシエイトプログラムを利用しています。
【編集・制作ポリシー】
本記事はRoute Bloom編集部が公式ドキュメント・技術仕様書の一次情報をもとに作成しています。ITインフラ・技術情報は急速に変化するため、実装前に最新の公式ドキュメントをご確認ください。情報の正確性には万全を期していますが、最新情報は各公式サイトをご確認ください。 【編集・制作ポリシー】
本記事はRoute Bloom編集部が各ベンダー公式ドキュメント・エンジニア監修をもとに作成しています。インフラ・クラウド構築は環境により異なります。本番環境への適用前に必ずテストを実施してください。情報の正確性には万全を期していますが、最新情報は各公式ドキュメントをご確認ください。 【編集・制作ポリシー】
本記事はRoute Bloom編集部が各ベンダー・技術標準の公式ドキュメントをもとに作成しています。
インフラ・クラウド技術に関する最終判断は実際の環境・バージョンで検証のうえ実施してください。
情報の正確性には万全を期していますが、最新情報は各公式ドキュメントをご確認ください。編集ポリシー:この記事は、Route Bloom の編集チームが最新情報を元に執筆・監修しています。情報の正確性を保つために定期的な見直しを行っています。
ABOUT ME




