第5章 5-3 / 管理者の仕事

cronで定期実行

このページで叩くコマンドと到達点

前提:5-2が完了し、ホームディレクトリ(~)にいる状態から始めます。5-2でstatus確認だけしたcronサービスを、このページでは実際に働かせます。crontabコマンドで「毎分、毎日9時、毎週月曜」といった定期実行のスケジュールを登録すると、あなたが何もしなくても裏側で自動的にコマンドが実行され続けます。このページの山場は、実際に1分ごとの自動実行を登録して、少し待って本当に動いたことを自分の目で確認する体験です。

このページではSET 1〜3、合計30行のコマンドを上から順に叩きます。手打ち推奨(コピーは確認用)です。

SET 1 ― crontabを開いて登録する

ubuntu@lightsail: ~
  1. $crontab -l
  2. no crontab for ubuntu
  3. $which crontab
  4. $crontab -e
  5. no crontab for ubuntu - using an empty one
  6. Select an editor. To change later, run 'select-editor'.
  7. 1. /bin/nano 2. /usr/bin/vim.basic ...
  8. $1
  9. $* * * * * date >> /home/ubuntu/cronlog.txt
  10. $Ctrl+O
  11. $Enter
  12. $Ctrl+X
  13. $crontab -l
  14. * * * * * date >> /home/ubuntu/cronlog.txt
  15. $cd ~
解説 ― SET 1 で何をしたか

1行目のcrontab -l(list)は、今の自分のユーザーに登録されている定期実行スケジュールを表示するコマンドです。初めて使うので、出力例のように「no crontab for ubuntu」(まだ何も登録されていません)と返ってきます。2行目のwhich crontabで、このコマンド自体がどこに配置されているかも確認しておきます。

3行目のcrontab -e(edit)で、登録内容を編集する画面を開きます。初回はどのエディタを使うか選ぶ画面が出るので、出力例のように選択肢から番号を選びます。4行目でこのドリル講座で使ってきたnano(3-1参照)に対応する番号を入力してEnterを押してください(番号は環境によって異なりますが、多くの場合nanoが1番です)。

エディタが開いたら、5行目の内容、* * * * * date >> /home/ubuntu/cronlog.txtを1行追加で書き込みます。これは「1分ごとに、現在時刻をdateコマンドで取得し、~/cronlog.txtに追記(3-3で学んだ>>)する」という予約です。先頭の* * * * *という5つのアスキーアートのような記号が、実行タイミングを指定する5フィールド※1で、詳しくはSET 2で解説します。

書き終えたら6行目のCtrl+O(nanoでの保存)を押し、7行目のように保存先ファイル名の確認が出たらEnterで確定、続けて8行目のCtrl+X(nanoの終了)でエディタを閉じます。保存すると「crontab: installing new crontab」のようなメッセージが表示され、この瞬間からcronサービスが1分ごとにこの命令を実行し始めます。crontabファイルへのパスは相対パスではなく/home/ubuntu/cronlog.txtのように絶対パスで書くのが鉄則です。cronはあなたが今どこのディレクトリにいるかを知らない状態でコマンドを実行するためです。9行目のcrontab -lで、確かに登録されたことを確認します。

POINT

crontab -eで編集するのは~/.bashrcのような普通のファイルではなく、cron専用の特別な保存場所です。直接nano ~/crontabのようなファイルを開いても意味がないので、必ずcrontab -e経由で編集してください。

ゆみちゃん
ゆみ

初回だけ出てくるエディタ選択、焦らなくて大丈夫だよ! ここまでのドリルでずっとnanoを使ってきたから、その番号を選べばOK。一度選んだら次回からはもう聞かれずに、いつものnanoがそのまま開くよ。

SET 2 ― 動いた!を確認する

ubuntu@lightsail: ~
  1. $sleep 60
  2. $cat ~/cronlog.txt
  3. Thu Jul 2 09:41:01 UTC 2026
  4. $sleep 60
  5. $cat ~/cronlog.txt
  6. Thu Jul 2 09:41:01 UTC 2026
  7. Thu Jul 2 09:42:01 UTC 2026
  8. $wc -l ~/cronlog.txt
  9. $tail -n 3 ~/cronlog.txt
  10. $crontab -l
  11. $tail -f ~/cronlog.txt
  12. $Ctrl+C
  13. $cd ~
解説 ― SET 2 で何をしたか

1行目のsleep 60(4-1で登場済み)で60秒、何もせずに待ちます。この間に裏側でcronが1回、date >> cronlog.txtを自動実行しているはずです。2行目のcat ~/cronlog.txtで中身を見ると、出力例のように現在時刻の記録が1行できています。これがcronが実際に動いた証拠です。自分が何も操作していないのに、ファイルが勝手に更新されていく——この体験こそが定期実行の本質です。

3行目でさらに60秒待ち、4行目でもう一度中身を確認すると、出力例のように記録が2行に増えています。5行目のwc -lで行数を数え、6行目のtail -n 3で直近の記録だけを確認します。7行目のcrontab -lで、登録内容が変わらず動き続けていることも改めて確認しておきます。

8行目のtail -f ~/cronlog.txt(1-4で登場済み)は、ファイルの末尾を監視し続け、新しい行が追記されるたびにリアルタイムで画面に表示するコマンドです。実行したまま1分ほど待つと、目の前で新しい時刻の行が追加される瞬間を見ることができます。確認できたら9行目のCtrl+Cで監視を止めて、通常のプロンプトへ戻ります。

POINT

「設定したのに動かない」の9割は、cronがコマンドを実行する環境が普段のログインシェルとは違うことが原因です。パスは必ず絶対パスで書く、コマンドの場所が不安ならwhich dateのように確認しておく、という2点を徹底すると事故が減ります。

SET 3 ― 5フィールドの読み方と後片付け

ubuntu@lightsail: ~
  1. $man 5 crontab
  2. $q
  3. $wc -l ~/cronlog.txt
  4. $crontab -r
  5. $crontab -l
  6. no crontab for ubuntu
  7. $sleep 60
  8. $wc -l ~/cronlog.txt
  9. $rm ~/cronlog.txt
  10. $ls ~
  11. $cd ~
解説 ― SET 3 で何をしたか

ここでcrontabの書式を整理します。* * * * * コマンドの先頭5つの*は、左から順に「分・時・日・月・曜日」を表す5フィールドです。それぞれを具体的な数字に置き換えることで、実行タイミングを細かく指定できます。1行目のman 5 crontab(1-5で学んだmanページの第5セクション、設定ファイルの書式を扱う区分)で正式なマニュアルを覗くことができます。確認したら2行目のqで抜けます。3行目のwc -lで、ここまでにcronlog.txtへ何行書き込まれたかを最終確認しておきます。

5フィールドの代表的な例を下の表にまとめました。*のままなら「毎回」、数字を書けば「その値のときだけ」という意味になります。

指定意味
* * * * *毎分実行このページで登録した設定
0 9 * * *毎日9時0分に実行朝のバッチ処理
0 9 * * 1毎週月曜9時0分に実行週次レポートの作成
*/10 * * * *10分ごとに実行定期的な死活監視
0 0 1 * *毎月1日0時0分に実行月次の集計処理

フィールドは左から「分(0〜59)・時(0〜23)・日(1〜31)・月(1〜12)・曜日(0〜6、0が日曜)」の順です。この講座で覚えるべきはまず「先頭が分」「*は毎回」の2点だけで十分です。

4行目のcrontab -r(remove)で、登録した予約をすべて削除します。5行目のcrontab -lで、SET 1の最初と同じ「no crontab for ubuntu」に戻ったことを確認してください。このページで登録した1分ごとの予約は、ここで完全に片付けます。もし消し忘れると、あなたのサーバーは今後ずっと1分ごとにファイルへ書き込み続けることになります。6行目のsleep 60で1分待ち、7行目のwc -lで行数が増えていないことを確認すると、確かにcronが止まったことがわかります。

8行目のrm ~/cronlog.txtで、動作確認用に増え続けたログファイルも削除し、9行目のls ~でホームディレクトリがきれいになったことを確認して、このページを締めくくります。

ゆみちゃん
ゆみ

crontab -rの消し忘れ、あたしも一度やらかしたことあるよ。練習用に1分ごとの予約を登録したまま放置してて、あとで気づいたらログファイルがすごい行数になっててびっくりした。練習で登録したものは、その場で必ず-rで片付ける癖をつけよう!

まとめ

5-3では、crontabを使って定期実行を登録し、実際に自動でファイルが更新されていく様子を確認しました。このページで叩けるようになったコマンドを一覧にまとめます。

コマンド何をするか覚え方
crontab -l登録されている予約を一覧表示するlist(見るだけ)
crontab -e予約をエディタで編集するedit(編集する)
crontab -r登録されている予約をすべて削除するremove(全部消す)
* * * * * <コマンド>分・時・日・月・曜日を指定して定期実行する左から「分時日月曜」
tail -f <ファイル>ファイルの追記をリアルタイムに監視する更新を見張り続ける

次のページ「5-4. ログを読む」では、cronを含むあらゆるサービスが日々書き残している記録、つまり「サーバーの日記帳」を読み解く練習をします。

脚注 ─ 用語解説
  1. 5フィールド … crontabで実行タイミングを指定する「分・時・日・月・曜日」の5つの欄。左から順に並び、*は「指定なし=毎回」を意味する。