毎朝の作業は「忘れない仕組み」に任せる
毎朝やっている作業は、一つひとつは小さくても、積み重なると意外に時間と集中力を奪います。ログの確認、バックアップの状態チェック、レポートの生成、一時ファイルの掃除などがその例です。こうした作業は、人間が覚えておくより、仕組みに任せるほうが確実です。
Linux では、その定番の道具が cron です。決まった時刻にコマンドを実行する、とても素朴な仕組みですが、素朴だからこそ設計の考え方が結果を大きく左右します。この記事では、コマンドの書き方ではなく、続けられる自動化にするための考え方を整理します。
まず「自動化してよい作業」かを見極める
何でも cron に載せればよいわけではありません。自動化に向いているのは、次のような性質を持つ作業です。
- 手順が毎回ほぼ同じで、判断を挟まない
- 失敗しても、やり直しが簡単である
- 実行したかどうかを、あとから確認できる
逆に、途中で人間の判断が必要な作業や、一度の失敗が大きな被害につながる作業は、そのまま自動化しないほうが安全です。その場合は、「準備や下ごしらえだけを自動化し、最後の確定は人が行う」という分け方が現実的です。
手で動くことを先に確認する
cron に登録する前に、同じコマンドを手で実行して、期待どおり動くことを確認します。これが最も基本で、最も効果のある習慣です。
そのうえで、作業を一本のシェルスクリプトにまとめ、cron からはそのスクリプトを呼ぶだけにします。crontab に長いコマンドを直接書くと、読みにくく、テストもしにくくなります。スクリプトに分ければ、手で試せるうえ、バージョン管理もしやすくなります。
cron の環境は対話シェルと違う
自動化でつまずく原因として、とても多いのが環境の違いです。cron が実行するときの環境変数は、普段ログインして使っているシェルより最小限です。特に PATH が短く、手では動くコマンドが cron からは見つからない、ということがよく起こります。
対策としては、次のような方法があります。
- スクリプト内で、コマンドをフルパスで書く
- スクリプトの冒頭で、必要な環境変数を明示的に設定する
- 相対パスに頼らず、作業ディレクトリを明示的に指定する
「手で動いたのに cron では動かない」ときは、まず環境の差を疑うと、原因にたどり着きやすくなります。
結果を残す:ログと通知の考え方
自動化の最大の落とし穴は、静かに失敗し続けることです。動いていないことに数週間気づかない、という事態は珍しくありません。そこで、実行結果を残す工夫を最初から入れておきます。
- 標準出力と標準エラー出力を、ログファイルにまとめて記録する
- ログには実行開始と終了の時刻を入れる
- 失敗したときだけ、メールやチャットなどで知らせる
通知は「成功のたびに届く」形にすると、すぐ読まれなくなります。失敗したときだけ目立つ形にしておくと、通知が来た時点で確実に気づけます。ただし、失敗の通知だけでは、スクリプトがそもそも起動しなかった場合には何も届きません。そのため、たまに「最近の実行記録があるか」を確認する習慣も、あわせて持っておくと安心です。
二重実行と実行時間に備える
毎朝の処理が、想定より長引くことがあります。前回の処理が終わらないうちに次の実行が始まると、同じファイルを同時に触って、データが壊れることもあります。
これを防ぐには、ロックの仕組みを使うのが定石です。たとえば flock コマンドを使えば、すでに実行中なら新しい実行を始めない、という制御を簡単に入れられます。また、処理を何度実行しても結果が同じになる「冪等」な作りにしておくと、失敗後の再実行も怖くなくなります。
時刻の決め方にも工夫がある
実行時刻は、なんとなく「朝の 9 時ちょうど」に決めがちです。しかし、自分だけでなく複数のジョブが同じ時刻に集中すると、負荷が重なります。少しずらして、切りのよくない時刻にするだけで、衝突を避けやすくなります。
また、作業の結果を使うのが何時なのかから逆算して決めることも大切です。たとえば出勤して確認するレポートなら、その少し前に終わるよう余裕をもって設定します。サーバーのタイムゾーン設定も、一度確認しておくとよいでしょう。思っていた時刻とずれていた、という失敗は意外と多いものです。
育てながら続ける
最初から完璧な仕組みを作ろうとすると、手が止まります。おすすめは、次のような順序で小さく始めることです。
- 手で毎日やっている作業を、一つだけ選ぶ
- スクリプトにして、手で動作を確認する
- cron に登録し、ログを残す
- しばらく様子を見て、失敗の通知や二重実行の対策を足す
また、何を、なぜ、いつ自動化したのかを、スクリプトの冒頭にコメントとして残しておくと、将来の自分や引き継ぐ人が助かります。cron の設定は、数か月後には存在そのものを忘れてしまいがちだからです。
まとめ
cron による自動化は、コマンドを一行書いて終わりではなく、「確実に動き、失敗に気づけ、あとから理解できる」状態までを含めた設計です。作業を見極め、スクリプトに分け、環境の違いに備え、結果を記録し、二重実行を防ぐ。この流れを押さえておけば、毎朝の作業を安心して手放せます。まずは小さな一つの作業から、試してみてください。
コメントを残す