「VPSを借りてLinuxを動かしているけど、定期的なメンテナンスをどうやって自動化すればいいかわからない。」
こういった悩みを解決するのが、Linuxのcron(クーロン)です。cronはLinuxに標準搭載されている「定期タスクスケジューラー」で、決まった時間にコマンドを自動実行する仕組みです。一度設定してしまえば、あとはLinuxが自動で動かしてくれます。
この記事では、cronの仕組みとcrontabの書き方を初心者向けに解説します。WSL2でのcron起動方法、VPSでの実践的な活用例、よくあるトラブルの対処まで、実行例つきでStep-by-Stepに説明します。
動作確認環境:Ubuntu 24.04 LTS(WSL2) / Rocky Linux 9.4(VPS)
この記事のポイント
・cronはLinuxの定期タスクスケジューラー。crontab -e で設定する
・crontabは「分 時 日 月 曜」の5フィールドで実行タイミングを指定する
・WSL2ではcronが自動起動しないためsudo service cron startが必要
・VPSではcrondが常駐しているためcrontab -eで即座に設定できる
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
cronとは?Windowsの「タスクスケジューラー」に相当するLinuxの仕組み
Windowsに「タスクスケジューラー」という機能があるように、Linuxにはcronという定期実行の仕組みが最初から備わっています。cronの正体は、バックグラウンドで常時動いているcrondデーモン(「クーロンディー」と読みます)です。crondは1分ごとに設定ファイル(crontab)をチェックして、条件に一致するコマンドを自動で実行します。
cronでできることの例
・毎日深夜2時にデータのバックアップを取る
・5分ごとにWebサービスの死活確認をする
・毎週月曜日の朝9時にレポートをメールで送る
・毎月1日の午前0時に古いログファイルを削除する
一度設定すれば自動で動き続けるため、定期的な作業を手動でやる手間から解放されるのがcronの最大のメリットです。
crontabの書き方|5つのフィールドを理解する
cronの設定はcrontab(クーロンタブ)と呼ばれるファイルに書きます。1行が1つの定期タスクで、以下の形式で記述します。# 書式:5フィールドの後にコマンドを書く 分 時 日 月 曜 実行するコマンド # 例:毎日午前2時にbackup.shを実行 0 2 * * * /home/user/backup.sh
1. 分(minute)~ 0~59の値を指定する
1時間の中の何分に実行するかを指定します。0 は「0分ちょうど(毎時00分)」、30 は「30分」を意味します。2. 時(hour)~ 0~23の値を指定する
1日の中の何時に実行するかを指定します。0 は午前0時(深夜0時)、9 は午前9時です。24時間表記を使います。3. 日・月・曜のフィールド
日(1~31)・月(1~12)・曜(0~7、0と7がどちらも日曜日)を指定します。*(アスタリスク)は「すべての値に一致」を意味し、制限なしという指定になります。4. よく使う時刻指定パターン一覧
| やりたいこと | crontab記述例 |
|---|---|
| 毎分実行する | * * * * * コマンド |
| 毎日午前2時に実行する | 0 2 * * * コマンド |
| 5分ごとに実行する | */5 * * * * コマンド |
| 毎週月曜日の朝9時に実行する | 0 9 * * 1 コマンド |
| 毎月1日の深夜0時に実行する | 0 0 1 * * コマンド |
| 平日(月~金)の夕方18時に実行する | 0 18 * * 1-5 コマンド |
cronを実際に設定する手順
1. crontabエディタを開く
以下のコマンドでcrontabの編集画面を開きます。$ crontab -e
1(nano)を選んでください。nanoはvimよりもキーボード操作がシンプルで初心者向けです。2. テスト用のcronジョブを書く
まず動作確認のため、1分ごとに現在の日時をファイルに書き出すジョブを設定してみましょう。# テスト:1分ごとに現在時刻をログファイルに書き出す * * * * * /bin/date > /home/user/cron_test.log
/home/user/ の部分は自分のホームディレクトリのパスに変えてください。nanoで編集した場合は
Ctrl + O で保存、Ctrl + X で終了します。3. 設定内容の確認と動作テスト
保存後、crontabの内容を確認します。$ crontab -l # テスト:1分ごとに現在時刻をログファイルに書き出す * * * * * /bin/date > /home/user/cron_test.log
$ cat /home/user/cron_test.log 2026年 7月 30日 水曜日 02:03:01 JST
crontab -e で該当行を削除して保存)。WSL2でcronを使う場合の注意点
WSL2はWindowsの上でLinuxを動かす仕組みですが、WSL2が起動した時にcrondは自動で立ち上がりません。これはWSL2特有の挙動で、cronを設定したのに動かないと最初に戸惑う方が多いポイントです。1. Ubuntu(WSL2)でcronを起動する
# cronデーモンを起動する $ sudo service cron start # 状態を確認する $ sudo service cron status * cron is running
wsl --shutdown コマンドを実行したりすると停止するため、再度起動が必要です。2. WSL2でsystemdを有効化している場合
/etc/wsl.conf で systemd=true を設定している場合は、systemdを使ってcronを永続的に自動起動できます。# systemdが有効な場合:cronを自動起動に登録する $ sudo systemctl enable --now cron # 自動起動設定と起動状態を確認する $ systemctl status cron
3. WSL2でのcron活用場面
WSL2のcronは「Windowsを使っている時間帯の自動化」に向いています。・ローカルの開発環境でのテスト自動化
・開発作業中に定期実行したいスクリプト
・Windowsが起動している間だけLinuxで処理をかける用途
24時間連続で動かしたいタスク(定期バックアップ・サーバー監視)は、常時稼働できるVPSが適しています。
VPSでのcron活用例
さくらVPSやConoHaなどのVPSでは、crondが最初から起動しています。crontab -e で設定するだけですぐに使えます。1. crondの稼働状態を確認する
# Rocky Linux / RHEL系の場合 $ systemctl status crond * crond.service - Command Scheduler Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled) Active: active (running) since Wed 2026-07-30 00:00:01 JST Main PID: 1234 (crond) # Ubuntu系の場合 $ systemctl status cron * cron.service - Regular background program processing daemon Loaded: loaded (/lib/systemd/system/cron.service; enabled) Active: active (running) since Wed 2026-07-30 00:00:01 JST
2. 実践例:毎日深夜にWebサイトをバックアップする
以下は、毎日午前2時に/var/www/html を圧縮してバックアップするcronジョブの例です。# 毎日午前2時にWebサイトをバックアップしてログに記録する 0 2 * * * /bin/tar -czf /home/user/backup/www_$(date +\%Y\%m\%d).tar.gz /var/www/html
・
$(date +\%Y\%m\%d) で日付をファイル名に含めると、毎日別ファイルとして保存されます・cronの中で
% を使う場合は \% とバックスラッシュでエスケープが必要です・コマンドは絶対パス(
/bin/tar)で指定するのがVPSでの基本ですcronが動かない時のトラブルシュート
1. crondが起動していない
最も多いのは、crondが停止しているか自動起動になっていないケースです。# crondの状態確認(Rocky Linux / RHEL系) $ systemctl status crond # 停止していたら起動する $ sudo systemctl start crond # 再起動時も自動起動するよう設定する $ sudo systemctl enable crond
2. コマンドが見つからない(PATHの問題)
cronはシェルとは異なる実行環境で動くため、PATHが通常のターミナルと違います。python3 や node など、コマンド名だけでは見つからないことがあります。# コマンドの絶対パスをwhichで調べる $ which python3 /usr/bin/python3 # cronの中では絶対パスで指定する */5 * * * * /usr/bin/python3 /home/user/check.py
3. スクリプトに実行権限がない
シェルスクリプトを実行する場合は、実行権限(755など)が付いているか確認してください。# 実行権限を付与する $ chmod +x /home/user/backup.sh # 権限が付いているか確認する $ ls -l /home/user/backup.sh -rwxr-xr-x 1 user user 256 Jul 30 01:00 /home/user/backup.sh
4. cronのログを確認する
cronが実行されたかどうかはシステムログで確認できます。# journalctlでcronのログを確認する(Rocky Linux / RHEL系) $ sudo journalctl -u crond --since "1 hour ago" # Ubuntu系の場合 $ sudo journalctl -u cron --since "1 hour ago"
本記事のまとめ
| やりたいこと | コマンド・設定 |
|---|---|
| crontabを編集する | crontab -e |
| 設定内容を確認する | crontab -l |
| 毎日午前2時に実行する | 0 2 * * * コマンド |
| 5分ごとに実行する | */5 * * * * コマンド |
| WSL2でcronを起動する(Ubuntu) | sudo service cron start |
| VPSでcrondの状態を確認する(RHEL系) | systemctl status crond |
| cronのエラーログを確認する | sudo journalctl -u crond --since "1 hour ago" |
関連記事 ~ ここから実践的なスキルを身につける
cronでスクリプトを自動実行するなら、次はシェルスクリプトの書き方も身につけておきましょう。また、サーバー管理に必要な周辺スキルも以下の記事でまとめています。・シェルスクリプト:set -xコマンドでシェルスクリプトをデバッグする方法 ~ cronで動かすスクリプトの問題を効率よく調べる
・セキュリティ:fail2banでSSHの不正アクセスを自動ブロックする方法 ~ VPSのセキュリティ自動化の基本
・サーバー構築:nmcliコマンドでネットワーク接続を設定する方法 ~ サーバーのネットワーク設定を確実に行う
・トラブルシューティング:straceコマンドでプロセスのシステムコールを追跡する方法 ~ cronが動かない原因を深掘りする
・ディスク操作:duコマンドでディレクトリの使用量を調べる方法 ~ バックアップファイルの容量を管理する
・ネットワーク:mtrコマンドでネットワーク経路と品質を確認する方法 ~ cronで死活監視する前に疎通を確認する
・Linux Tips:loggerコマンドでシステムログに記録する方法 ~ cronジョブの実行履歴をsyslogに残す
無料の「Linuxサーバー構築入門マニュアル(図解60ページ)」をプレゼントしています。
cronの自動化を使いこなしながら、実務で通用するサーバー管理のスキルを体系的に身につけたい方は、ぜひ受け取ってみてください。
無料マニュアルを受け取る >>
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら
- 前のページへ:LinuxでSSL証明書を設定する入門|Let's EncryptとcertbotでNginxをHTTPS対応にする方法
- この記事の属するカテゴリ:【Linux入門】初心者のための基礎知識・講座へ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。
登録無料・いつでも解除できます