Rundeckのジョブ運用と失敗談

自称Vue.js宣教師リンです!

とはいえ仕事はサーバーアプリケーションエンジニアなので
実はPHPを中心にいろいろとやっています。

今回はRundeckの運用と失敗談のメモ。
弊社ではcronを止めて全部Rundeckでスケジュール実行のタスクの管理しようぜ!っていう機運が高まっています。

現在の状況としては、1つのプロジェクトでは導入済みで、それを横展開しましょうみたいな感じ。

ところでみなさん、Rundeckのジョブ設定って実際のところどうしてますか?

ジョブ設定ってどうすればいいのん?みたいなあたりを探してみたんですが、
「Rundeckはいいぞ!」ばかりという記事はたくさんみつかるものの、実際のジョブ設定の勘所がでてこなくて🤔 みたいな顔をすることになりました。

ということで、悩んだ結果とりあえず私はこうしましたってのをメモしておこうと思います。

本職のインフラエンジニアを始めとした皆さん、「そんなふうにやってるならこうしたほうがいいよ!」とかありましたらコメントをお待ちしております。

私のやってるRundeckのジョブ設定運用

※ 備考
・プラットフォーム展開の都合上、パラメータを変えただけでそれ以外同じなコマンドを7回叩くみたいなのが頻発します。
・ゲーム用にphpで書かれたバッチ処理と、それ以外でふんわり分けているところがあります

 

  • ゲーム用実ジョブカテゴリ
    • 上記都合で、1つのジョブに各プラットフォームで順次実行するように
      7つのコマンドをステップ実行するように設定しています
    • 実行のタイミングが同じでも叩くものが別ならそれは別のジョブにしてます
  • トリガージョブカテゴリ
    • Rundeckのジョブは別のジョブを指定して実行できるのでそれを使います
    • 週次、日時、月次など、実際の実行スケジュールごとにジョブを作ってます
    • ジョブの名前に実行頻度とタイミングを入れておくと見やすくてよさそう
  • サーバー運用ジョブカテゴリ
    • 古いログの破棄など、ゲームとは直接関係ないものを集めて置いています
  • 使ってないジョブカテゴリ
    • スケジュールには組み込まれてないんだけど、
      消すと散逸しそうだからとりあえず残しておこうみたいなカテゴリを作ってます

みたいな感じで、私はジョブをカテゴリ分けしてます!
とっちらかってるとなんとなく落ち着かなくなっちゃうので。

ちょっと気になったところは、ジョブが親子関係を作ると、親側のActivityの中に、子側のログが残ります。
逆に子側のActivityが0になってしまい、ジョブの実態がどれぐらいの頻度で呼ばれているのか?が非常にわかりにくいです。

構成上、「パラメータ違いの同じものを何度も実行する」「でもダラダラ書きたくない」
この2点を解決するためこうなっているので、本当はあまりうまくない方法なのかもしれないですね。

 

やっちゃった失敗談

みなさん、ジョブのタイムアウトは必ず設定しましょう!

というのもですね、上記のカテゴリで実ジョブカテゴリのものは、rundeckのあるrundeckサーバから、remoteへsshして各コマンドを叩いているんです。
そして、ジョブの実行の真っ最中にこのバッチサーバーを落としたことがあるんです。

そうするとですね、普段はremoteから終了コードが送られてきて終了!となるところが、
いつまでたっても終了コードが通知されないわけですよ。

でもって、前の実行が終わるまで次の実行を始めない設定とかにしてたものですから、
手動で止めるまで永遠に次が始まらないわけですよ!

無限に帰ってくるのを待ってるだけなので、エラーにもならないというのがミソでして、
毎時バッチが止まっていたことにしばらく気づかず肝を冷やしたことがあります。

タイムアウトは必ず設定しましょうね!(大事なことなので2回言いました)

余談

ところで最近のRundeckのカテゴリ管理はもうちょっと楽になってるんでしょうか。

ver 1.8.0.xでは、カテゴリはジョブから設定する自由入力文字列で、ジョブから一個一個設定します。
カテゴリ名の一括リネームとかできない気配です。

とりあえず分けていって、名前まとめて変えよーっと、とか考えてたらえらい目に遭ったのは秘密です。
(そして3.0はGUI全然違うらしいよ!って社内からツッコミが入りました!)

ということで、意外となんでもやるリンさんでした。