本文へスキップ
BecomeCoder

Linuxコマンドコース · 第6章 自動化とシェルスクリプト · レッスン34

cron ― 定期実行を仕込む

ブラウザで完結

導入

「毎晩3時にバックアップを取る」「15分ごとに監視スクリプトを回す」——こうした 定期実行 を担うのが cron の仕組みです。前レッスンで作ったスクリプトを、時間で自動的に走らせる。人が張り付かなくてもサーバーが自分で仕事をする、運用自動化の到達点です。予定表を管理するコマンドが crontab(cron table)です。

説明

自分の予定表は crontab -l(list)で確認します。このシミュレータには例として2つの予定が入っています。

crontab -l

各行は 「分 時 日 月 曜日 コマンド」 の6つのフィールドでできています。最初の5つが「いつ」、最後が「何を」です。

0 3 * * * /home/user/scripts/backup.sh
│ │ │ │ │
│ │ │ │ └ 曜日(0=日〜6=土。* はすべて)
│ │ │ └── 月(1〜12。* はすべて)
│ │ └──── 日(1〜31。* はすべて)
│ └────── 時(0〜23)
└──────── 分(0〜59)

つまり 0 3 * * * は「毎日3時0分」。*/15 * * * **/15 は「15分おき」という意味です。読めるようになると、他人が仕込んだ設定も理解できます。ここに前レッスンの backup.sh が登録されているのに注目——「スクリプトを書く → cron で定期実行する」がつながりました。

予定表を編集するときは本来 crontab -e(エディタが開く)、まるごと消すときは crontab -r です。

crontab -r
crontab -l

-r は予定表を全消しする取り消せない操作です。本物の環境では要注意(このシミュレータは「最初からやり直す」で戻せます)。cron はログのローテーション、バックアップ、監視、証明書の更新など、サーバー運用のあらゆる「定期作業」の裏で働いています。

やってみよう

crontab -l で今の予定を眺め、0 3 * * *(毎日3時)と */15 * * * *(15分おき)が何を表すか、上の図と照らし合わせてください。crontab -r を打ったあと crontab -l を実行すると、予定が空になる(no crontab for ...)ことも確かめましょう。

演習

今のユーザーに登録されている cron の予定を一覧表示してください。

ヒント1を見る

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

ヒント2を見る

crontab -l

実際に動かしてみよう

下の端末にコマンドを打って Enter を押すと、その場で結果が返ります。本文で出てきたコマンドを実際に試しながら進めましょう(ファイルを消しても「最初からやり直す」で元に戻ります)。

Linux シェル(シミュレート)

ブラウザ内でコマンドを試せる仮想シェルを読み込みます(本物のLinuxカーネルではなく学習用の再現です)。
スクロールして表示された時点でも自動で読み込まれます。