cronとは何か
cron(クロン)とは、決めた時刻に、決めた仕事を自動で動かす仕組みです。スマホが夜中に写真をバックアップするのと、同じ考え方です。
人が毎晩ログインして実行する必要はありません。1行を書いておけば、サーバーが忘れずにやってくれます。
このレッスンのゴール
メモ
cron の1行を読んで、いつ動く仕事かを答えることができる。
キーワード
| ことば | いみ |
|---|---|
| cron | 決めた時刻に仕事を動かす仕組み |
| バックアップ | 大事なデータの予備のコピー |
| スクリプト | 命令を並べて、まとめて動かせるようにしたファイル |
| cron式 | 分、時、日、月、曜日の5つで時刻を書いた形 |
| ログ | いつ何が起きたかを書き残した記録 |
学生が入力するセルは、このプレビューでは空白です。
始める前に
メモ
上のバーの Start the lab を押し、マシンが動き出すまで待ってください。このレッスンの Run は、読むだけです。ラボの課題の cron の設定は、あとで自分で行います。
バックアップは何をするのか
バックアップは、大事なデータを別の場所にコピーしておくことです。壊れたり消えたりしても、コピーから元に戻せます。
このラボのサーバーには、共有フォルダを別の場所へコピーするスクリプトがあります。中身を読んでみましょう。
バックアップのスクリプトを読む
cat /usr/local/bin/backup.shここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
権限と持ち主を見る
stat -c '%a %U' /usr/local/bin/backup.shここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
例: スクリプトの各行の意味
| 行 | 意味 |
|---|---|
| mkdir -p /var/backups/projects | コピー先のフォルダを、なければ作る |
| cp -a /srv/projects/. /var/backups/projects/ | 共有フォルダの中身を、そのままコピーする |
| echo ... >> /var/log/backup.log | 終わった時刻を、ログに1行足す |
学生が入力するセルは、このプレビューでは空白です。
cron式は5つの欄でできている
cron式は、空白で区切った5つの欄で時刻を書きます。左から順に、分、時、日、月、曜日です。
* は「すべて」という意味です。曜日は、日曜日が0、月曜日が1、土曜日が6です。そのあとに、動かす命令を書きます。
例: cron式の読み方
| cron式 | 動く時刻 |
|---|---|
| 0 3 * * * | 毎日、午前3時ちょうど |
| 45 22 * * 5 | 毎週金曜日の、午後10時45分 |
| 0 8 1 * * | 毎月1日の、午前8時 |
| */10 * * * * | 10分ごと |
| 0,30 9 * * 1 | 毎週月曜日の、9時ちょうどと9時30分 |
学生が入力するセルは、このプレビューでは空白です。
cronに仕事を登録するには
仕事は、crontab -e で自分用の表に書くか、/etc/cron.d の中にファイルとして置きます。後者のファイルでは、時刻の欄のあとに、実行するユーザーの名前も書きます。
次の例は読むだけで、ここでは実行しません。
例: 毎週日曜の仕事
# 毎週日曜日の午前4時に、ログを整理するスクリプトを root で動かす
0 4 * * 0 root /usr/local/bin/tidy-logs.shよくある間違い
注意
「5 」は、5分ごとに動くと考える人がよくいます。これは、毎時5分に1回動く意味です。5分ごとにしたいときは、「/5 *」と書きます。
さらに挑戦: 動いたか確かめる
予約した仕事は、動いたかどうかを確かめないと意味がありません。バックアップのスクリプトは、終わるたびにログへ1行足します。
tail でログの最後を読めば、昨夜動いたかがわかります。ログに書かれた時刻が1日前なら、何が考えられますか。