本文へスキップ
BecomeCoder

シェルスクリプトコース · 第8章 cron で定期実行 · レッスン34

cron とは ― 時間で動く仕組み

ブラウザで完結

導入

夜中の3時にバックアップを取りたい。でも毎晩3時に起きるわけにはいきません。Linux には、時刻になったらコマンドを実行してくれる常駐プログラムが最初から入っています。それが cron です。

説明

cron は、サーバーの裏でずっと動いている番人です。1分ごとに「いま実行すべき予定はあるか」を確認し、あれば実行します。

flowchart LR
    A["cron(常駐)"] -->|"1分ごとに確認"| B["予定表 crontab"]
    B --> C{"いまの時刻に<br/>合う行はある?"}
    C -->|"ある"| D["そのコマンドを実行"]
    C -->|"ない"| A

予定表のことを crontab(cron table) と呼び、ユーザーごとに1つ持ちます。中身を見るコマンドが crontab -l(list)です。

#!/bin/bash
# いま登録されている定期実行の予定を確認する

echo "=== 登録されている予定 ==="
crontab -l

echo "=== 予定から呼ばれるスクリプト ==="
cat /home/user/scripts/backup.sh

このシミュレータには、最初から2つの予定が入っています。

0 3 * * * /home/user/scripts/backup.sh
*/15 * * * * /home/user/scripts/deploy.sh

1行が1つの予定で、**前半5つが「いつ」、残りが「何を」**です。次のレッスンで読み方をきっちり押さえます。

cron が使われる場面は、実務では山ほどあります。

  • バックアップ(毎晩・毎週)
  • ログのローテーションと古いログの削除
  • 死活監視(数分おきにチェックして、異常ならアラート)
  • 証明書の自動更新(月1回)
  • 集計バッチ(毎朝、前日分のレポートを作る)

つまり、あなたが書いたスクリプトの多くは、最終的に cron に登録されるということです。第1章で「手作業を仕組みに変える」と言いましたが、その最後のピースがここにあります。

やってみよう

下の端末で crontab -l と打って、いま登録されている予定を眺めてください。次に cat scripts/backup.sh で、予定表から呼ばれているスクリプトの中身を見てみましょう。「スクリプトを書く → cron に登録する」という関係が具体的に見えます。

演習

いま登録されている cron の予定を一覧表示してください。

ヒント1を見る

一覧は list の頭文字、-l です。

ヒント2を見る

下の端末で crontab -l

実際に動かしてみよう

本文のサンプルや演習のコードは、コードブロック右上の「コピー」ボタンでコピーして、下のエディタに貼り付ければそのまま実行できます。

シェルスクリプト(シミュレート)

スクリプトを書くエディタと、それを動かす仮想シェルを読み込みます(本物のbashではなく、動きを再現した学習用の環境です)。
スクロールして表示された時点でも自動で読み込まれます。