クーロン(cron)を使うことによって何ができるのか?クーロンタブ(crontab)で定期的な処理を行う

2020年7月10日

クーロン(cron)の概要

Webアプリケーションの開発をしていると、「クーロン」や「クーロンジョブ」という言葉がでてきます。
クーロン(cron)は、LinuxなどUnix系のOSで長く使われてきた標準のタスクスケジューラ機能です。 「クーロン」という名前はギリシャ神話にでてくる時間の神様である「クロノス」から来ているとされています[1]'crontab’ in Linux with Examples – GeeksforGeeks
このクーロンによって定期的に実行することを命じられたジョブがクーロンジョブで、「毎週土曜日の〇〇時〇〇分」とか、「30分おきに」とか、分刻みで、指定したプログラムを定期的に自動実行させることができます。
クーロンはバックグラウンドで動作するデーモン(常駐プロセス)なので、CUIで操作するサーバー機で設定するのに便利で、サーバー管理のためには覚えておいて損のない機能です。
今回は新人のSE・テクニカルディレクター向けにクーロンがどのようなものなのかを解説していきます。

クーロンの設定の流れ

CUIの例
参考画像:CUIのイメージ(wikiより)

クーロンはCUIで操作

クーロンを設定するサービスを使用しない場合、クーロンを設定するには、サーバーにSSHで接続をします。
サーバーにSSH接続するアプリケーションはPuttyやTeratermなど様々なものが挙げられますが、画面は参考画像のように、真っ暗な画面に文字が表示されるような状態です。
これはCUI(キャラクタユーザインタフェース)と呼ばれ、今日のようにパソコンが普及するまでは、このような画面でコンピュータを操作していました。
現在のパソコン画面はGUI(グラフィカルユーザインタフェース)と呼ばれますが、CUIの画面にはマウス操作や分かりやすいアイコンなどがないため、サーバーエンジニアでない限りとっつきにくい印象を受けるかと思います。

クーロンタブ(crontab)で設定する

クーロンを設定するときはコマンド crontab -eでエディタを開き、「分 時 日 月 曜日 コマンド」の順に半角スペース区切りで1行で設定を書き込みます。
例えば以下のような記述をしていきます。

30 08 10 06 * /xxx/yyy zzz

上記の設定はそのまま読むと「30分 8時 10日 6月 毎日 /xxx/yyyのディレクトリ zzzのコマンド」となりますが、整理すると、「6月10日午前8時30分に/xxx/yyyのディレクトリでzzzというコマンドを実行する」となります。

クーロンを設定することのメリット

作業の自動化を行うことができる

クーロンを使ってジョブを自動実行されるプロセスとして登録する最大のメリットは、クーロンを設定しない場合と比べて、人の手を省くことができ、ひいてはコストダウンに繋げられることにあります。

定期的な作業を忘れずに済む

作業の自動化に伴い、人の手をかけずに済むだけでなく、定期的な作業を忘れるというヒューマンエラーを防ぐこともできます。

人に負担をかけずに夜間処理を行うことができる

Webアプリケーションでは、「AM0時に前日のデータを集計し、始業時間の朝8時までに処理を終わらせたい」という要件がよくあります。
こうした時にクーロンの機能を使わなければ、毎日深夜に人がプログラムを実行させるという作業をしなければなりません。
しかし、クーロンの機能を使って、スケジュール管理を行えば、人に負担をかけず、要件を満たすWebアプリケーションを開発することができます。

クーロンを設定する時の注意点

クーロンは簡単な設定しか行えない

クーロンを設定するメリットは様々あるので、定時のバックアップやサマリーの集計、ログの肥大化を抑制するためのローテート、システムの再起動、データの転送など、自動実行させたいジョブはたくさん出てくるでしょう。クーロンは無料で簡単に利用でき、シンプルなジョブの実行指定には向いています。
しかし、注意しなければならないのは、クーロンは必要最低限の機能に限られているため、ジョブとジョブを連携させてそれらの結果を利用するなど、この機能単体では複雑な処理を行うことはできません。
あくまでクーロンに設定できるのは、「何月何日何曜日何時何分にXXの処理を行う」という設定だけで、どのような処理を行うかは実行するプログラムの内容に依存します。

サーバーの稼働状況や設定に注意

クーロンはサーバーで動かしているので、そもそもサーバーが正常に稼働していなければ、クーロンジョブも正常に実行することができません。
そのため、クーロンジョブを設定する場合は、サーバーの稼働状況により注意を向けていかなければなりません
また、サーバーに設定している時間が誤っていれば、トラブルのもととなってしまいます。
よくある失敗が、「毎朝10時にAの処理を行う」と設定したつもりだったのに、意図した時間に処理が実行されず、確認したところサーバーの時間設定がアメリカ時間だったというものです。
このようなトラブルも少なくないため、クーロンを設定する時には、あわせてサーバーの時間設定を確認しておきましょう

クーロンの設定のしすぎには注意

一般に、登録するジョブの数が増えてくると不整合が起きやすくなり、不具合を確認し、修正するにしても、ジョブ相互の依存関係の把握が煩雑です。
確認の工数が増え、処理の追加を行うにも間違いが発生しやすくなってしまいます。場合によっては、サーバーエンジニアが深夜までメンテナンス作業をしなければならなくなってしまいます。
そのため、クーロンはあまり設定しすぎないようにし、どのような設定をしているのかを別途資料にまとめておき、サーバーエンジニアがいなくても設定状況が把握できるようにしておいたほうがよいでしょう
さらに、 あまりに多くのクーロンジョブを設定し、それを同時に実行することによってサーバーがダウンしてしまえば、クーロンジョブが正常に実行できないだけでなく、サーバー停止に伴う様々なトラブルに見舞われてしまいます。
複数の処理が同時に実行されて、サーバーに負荷をかけないような配慮も、クーロンを利用していくためには不可欠です。

まとめ

今回はWebアプリケーションの開発の際に議題に上がりやすいクーロンおよびクーロンジョブについてみてきました。
プラットフォームのクラウド化が前提となっている昨今では、複数システムにまたがったジョブ連携の実行管理、一元的な統合モニタリング環境を提供するツールがあり、オープンライセンスのものや、初期費用無償で利用できる商用ツールもあります。
SEやテクニカルディレクターが自らの手でクーロンを設定することは少ないですが、どのような方法で設定しているのか、概要程度は把握しておいたほうがよいでしょう。
それ以上に、今回紹介したようなクーロンの注意点を十分に理解し、プロジェクトを失敗させない事前の確認が大切だと言えるでしょう。

参考