(Photo by:Your Best Digs)
サーバー管理や比較的規模の小さいシステムでのジョブ管理にcronを利用した事がある方も多いと思います。
cronはLinux環境であれば汎用的に利用できて便利ですが、少し込み入ったバッチ処理や重たい処理を行うケースが増えてくると物足りなさを感じてくると思います。
この記事ではオープンソースで開発されているcronの代替えとなるジョブスケジューラーを紹介します。
Jobber
URL:http://dshearer.github.io/jobber/ , https://github.com/dshearer/jobber
ライセンス:MIT
Jobber はcronに洗練されたステータスレポートとエラーハンドリングを追加したcronの代替えとして利用できます。Go言語で開発されています。
cronではcrontabでジョブの実行タイミングと実行コマンドを編集しますがJobberではYAMLフォーマットでジョブを編集します。
Jobberの大きな特徴の1つにYAMLで記述するジョブにエラー発生時の制御を記載できる点があります。エラー発生時に停止するのか、通知するのか、ジョブの失敗時に通知するのかを選択できます。
cronでは実行コマンドに指定できるのは1行のため、複数実行を行う場合はシェルを作成して呼び出すか、またはワンライナーでコマンドを1行に収める必要がありました。Jobberでは実行コマンドを複数行に分割して記述できるためシェルの内容を1つのYAMLファイルで管理できます。
minicron
URL:https://github.com/jamesrwhite/minicron
ライセンス:GPL3.0
minicronはcronのジョブ管理とジョブ実行結果のモニタリングを行いcronの補助をするソフトウェアです。Rubyで開発されています。
ウェブUIからはジョブ管理、ジョブのモニタリング、ジョブの実行履歴の参照、実行中ジョブのリアルタイム監視が可能です。
ジョブ実行結果の通知方法としてEmail、Twilioを利用したSMS、PagerDuty、Amazon SNS、Slackが提供されています。
データベースにはデフォルトでSQLiteが利用されるためデータベースサーバーを準備する必要がありません。PostgreSQLとMySQLも利用可能です。
minicron の特徴として、cronで実行するコマンドを以下のようにminicron runに続けて実行する事でコマンド実行結果の保存と監視を実現している点があります。
$ minicron run 'mysqldump db > backup.sql'
minicronの設定は/etc/minicron.tomlに記載します。この設定ファイルにはminicronが監視しているcronの実行結果に対する設定も含まれます。例えばアラート発生時のメール送信先のSMTPやSlackでwebhookするURLです。
Chronos
URL: https://mesos.github.io/chronos/
ライセンス:Apacheライセンス2.0
Chronosは分散クラスタ管理ツールのApache Mesosを利用したフォールトトレラントなジョブスケジューラーです。開発はScalaで行われchaosフレームワークが利用されています。
実行環境にはApache Mesos、ZooKeeper、JDK1.8以上が必要です。
Apache Mesos自体が大規模なクラスタ環境の構築を前提としていますので、Chronosも単一サーバーでの動作を前提としておらず、クラスタ環境でcronのジョブを分散実行したい用途に向いています。設定はZooKeeperで保存しています。
ウェブUIが提供されており、ジョブの追加・削除・編集といった操作が可能です。また過去のジョブ実行履歴とその統計も参照できます。
dkron
URL: http://dkron.io/, https://github.com/victorcoder/dkron
ライセンス:LGPLv3
クラスタ環境で分散した実行環境でフォールトトレラントなジョブスケジューラーを実現するソフトウェアです。故障しているマシンがあった場合やmasterに障害があっても代替えに切り替えられジョブが実行されます。開発はGoで行われています。
小規模なクラスタ構成でも大規模でもシンプルにジョブを分散実行できるのが強みです。Linux、OSX、そしてWindows上で動作します。ウェブUIが提供されています。
バックエンドとしてetcdかconsulかzookeeperを選択できます。ジョブの実行ノード数やチェインするルール、並列実行などが指定可能です。
良く対比されるソフトウェアとの比較を以下URLに直接書いてあるので少し紹介します。
http://dkron.io/about/dkron_vs_other_software/
Apache Chronos(旧Airbnb Chronos)はクラスタ環境で動作する分散型フォールトトレラントなジョブスケジューラーのため似ています。違いはより軽量でApache MesosやZookeeperに依存したくない場合に向いています。
Rundeckは少し性質が異なりますが比較されています。Rundeckは良く利用されるプラットフォームでエージェントレスと権限管理と監査と優れた機能を実現していますが、Javaで書かれているためセットアップが簡単ではありません。また中央管理型のためRundeckがサポートしているデータベースでは障害性と高可用性を実現するのが困難です。Rundeck はdkronに無い機能を持っていますが、dkronは軽量でフォールトトレラントをすぐに実現できます。
Anacron
名前を見ると、そういえばanacronとかあったなと思いだす方もいるかも知れません。主要なLinuxディストリビューションに含まれています。
Cronはスケジュールした通りにジョブを実行しますが、anacronは起動したタイミングで実行されていないジョブを実行します。実行タイミングが厳密ではないが1日1回実行したい、週1回実行したいジョブであればanacronが向いています。
起動のタイミングやスケジューリングの関係でcronを使うと問題が起こる一部のジョブをanacronで実行するようにすると問題を解決できるかも知れません。
まとめ
(Photo by:University of the Fraser Valley)
クラスタ環境で運用する大規模向けなcronから、アプリケーションに組み込んで利用するcron、cronの代替えとして利用できるコマンドまで紹介しました。
cronは汎用的で便利ですが利用用途や範囲が広がると管理し辛くなってきます。そのような場合にはここで紹介したソフトウェアを利用すると問題を解決できるかも知れません。
参照情報
http://dshearer.github.io/jobber/
https://github.com/dshearer/jobber
https://github.com/jamesrwhite/minicron
https://mesos.github.io/chronos/
http://dkron.io/
https://github.com/victorcoder/dkron
本ブログは、Git / Subversionのクラウド型ホスティングサービス「tracpath(トラックパス)」を提供している株式会社オープングルーヴが運営しています。
エンタープライズ向け Git / Subversion 導入や DevOps による開発の効率化を検討している法人様必見!
「tracpath(トラックパス)」は、企業内の情報システム部門や、ソフトウェア開発・アプリケーション開発チームに対して、開発の効率化を支援し、品質向上を実現します。
さらに、システム運用の効率化・自動化支援サービスも提供しています。
”つくる情熱を支えるサービス”を提供し、まるで専属のインフラエンジニアのように、あなたのチームを支えていきます。
No Comments