使ってはいけない「crontab」コマンド

2015年9月4日

サーバー テクノロジー トラブル

サーバー管理を行なっている時に、定時バッチなどをセットする事は日常茶飯事です。 そんな時に、サーバー操作をしているユーザーが複数いた場合、各々crontabを使って登録を行なっていると いざサーバー移管を行うという場合に、root管理者の方で、各々のcrontabの設定を拾いきれず、 crontabの移行に漏れがでてしまう可能性があります。 というか、実運用でこういったトラブルはかなりの確率で発生してしまいます。

crontabのルールか

仕事でもサークルでもサーバー管理を行う上でサーバー管理者は必要な役割のため、必ず設置するようにしましょう。 crontabも、各ユーザーで個別に行うのではなく、各々が負荷の高い処理を行なってしまったら、サーバーダウンにもつながってしまう可能性も高いです。 これを回避するために、サーバー管理者が全てのcronとそれぞれのバッチの負荷値、処理時間などを認識して、バッチ計画を作成するようにしましょう。

crontabは/etc/crontabファイルのみに記載

crontabコマンドは、対象のユーザーにログインして $ ctrontab -l と入力して確認しなければならないので、とても操作性が乏しくなるので、 サーバー管理者が一括して/etc/crontabに書き込むことで、一括管理が行えるようになります。 記述でコメントなどを付けて管理するのが理想的でしょう。

オススメルール

cronは分単位でしか動作できないので、秒単位には適していないのですが、あまり秒単位でのバッチ処理を行う必要性はないと考えてます。 秒単位での処理が行いたい場合は、node.jsやfluentdなどを使ってシステムを組んだほうが一般的ですね。 毎時、毎日、毎週、毎月、毎年 のような場合は、 /etc/cron.dayly /etc/cron.hourly /etc/cron.weekly /etc/cron.monthly などの個別の登録も可能だが、上記と同じ理由で、できるだけ /etc/crontab に処理を集約して行なったほうがいいと考えてます。 そして、多人数を管理するために、 dayly.sh monthly.sh weekly.sh hourly.sh などのshellファイルを管理用として設置しておけば、crontabを都度書き直す事無く運用できるため、 記述ミスのようなトラブルで全ての処理がコケるリスクも減ります。 決まった時刻に発生するバッチは時刻指定のためにcrontab修正を行う必要がありますが、都度shellファイルを読み込む形にしておけば 上記と同様に不具合回避になります。 サーバー管理は、とにかくちょっとした不具合が致命傷に繋がることが多いので、安定運用を目指してみましょう。 他にもアイデアがあれば、コメントください。

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。