本文へスキップ
BecomeCoder

サーバーコース · 第4章 動かして運用する · レッスン21

定期実行と監視 ― cronで自動化し、ログとリソースで見張る

ブラウザで完結

導入

「毎日深夜3時にバックアップを取る」「15分ごとにデプロイ状況を確認する」——こうした繰り返し作業を、人が毎回手で打つのは非現実的です。決まった時刻・間隔でコマンドを自動実行してくれるのが cron。そして自動化した先も、サーバーは誰かが見張ってあげる必要があります。

説明

cron の「予定表」を確認するコマンドが crontab -l(list)です。

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

1行が1つの予定です。前のレッスンで学んだバックアップが、実はすでに自動化されていたことが分かります。書式は先頭の5つのフィールドで「いつ実行するか」を表します。

flowchart LR
    A["分<br/>0-59"] --- B["時<br/>0-23"] --- C["日<br/>1-31"] --- D["月<br/>1-12"] --- E["曜日<br/>0-6(日-土)"] --- F["実行するコマンド"]

0 3 * * * /home/user/scripts/backup.sh を読み解くと、「分=0、時=3、日=(毎日)、月=(毎月)、曜日=*(毎曜日)」——つまり 毎日 深夜3時に backup.sh を実行する、という予定です。*/15 * * * **/15 は「15分ごと」を意味し、こちらは deploy.sh を頻繁にチェックしています。

書き方意味
0 3 * * *毎日3:00
*/15 * * * *15分ごと
0 0 * * 0毎週日曜0:00
0 9 1 * *毎月1日9:00

予定表を丸ごと消したいときは -r(remove)を使います(このシミュレータではエディタでの編集 -e は行えません。実際の現場では crontab -e でエディタを開いて編集します)。

自動化したら、それで終わりではありません。「仕組みがちゃんと動いているか」を見張る監視が必要です。ここまでの章で学んだコマンドが、そのまま日々のチェックに使えます。

uptime

load average(負荷平均)が急に高いままなら、何かが重くなっているサインです。メモリの余裕も見ておきます。

free -h

そして、サービスが記録したログを確認する journalctl -u nginx(第2章)、ディスクの空きを確認する df -h(前のレッスン)——運用は、これまで学んだコマンドの組み合わせそのものです。

flowchart TD
    C["cron<br/>決まった時刻に自動実行"] --> D["日々のチェック"]
    D --> U["uptime<br/>負荷は大丈夫?"]
    D --> F["free -h<br/>メモリは足りてる?"]
    D --> J["journalctl -u サービス<br/>エラーは出ていない?"]

本番運用では、これらの確認自体もさらに自動化されます(監視ツールが定期的にチェックし、異常があれば通知する)。それでも「何を、なぜ確認しているのか」を体で分かっていることが土台になります。cron で自動化し、ログとリソースで見張る——このサイクルが、サーバーを安心して動かし続ける基本です。

やってみよう

crontab -l で、すでに登録されているバックアップとデプロイの予定表を確認しましょう。uptime で負荷平均、free -h でメモリの余裕を見て、「サーバーが元気に動いているか」を日々チェックする感覚をつかんでください。

演習

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

ヒント1を見る

cron の予定表を確認するのは crontab -l です。

ヒント2を見る

crontab -l

実際に動かしてみよう

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

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

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