Edited at

Rundeck ジョブの作成と実行

More than 3 years have passed since last update.

以前書いた Rundeck のメモです。死蔵しておいてももったいないので Qiita で公開します。

内容は多少古くなっているので注意しください。


ジョブの作成

Jobs 画面を開いて、「Create Job」から「+New Job…」を選択します。 



 

Create New Job の画面になります。 



 

Job Name には pstree を指定します。

Workflow では、Add a Step で Command を選択します。

Command として pstree -p --show-parents $$ を指定します。

Nodes では、それぞれのノードにコマンドを発行するため Dispatch to Nodes

を選択します。

Node Filter に . * を入力し、Set Filter をクリックします。 

ほかの項目はデフォルトにままでかまいません。 

 

これで Create をクリックしてジョブを作成します。 


ジョブの実行

作成したジョブを実行します。 

ジョブの一覧から先ほど作成したpstreeを選択します。 

psteeジョブの画面に切り替わります。 

 

Run Job Now をクリックします。 

 

ジョブが実行される様子が表示されます。 

今回のジョブはステップが一つしかないのですぐに終了するでしょう。 

 

実行結果が表示されます。 

 


Summary

実行結果の要約です。 

 


Report

ジョブの実行結果をノードやステップごとに確認できます。 

 

 


Log Output

ジョブの出力が確認できます。 

 


Definition

ジョブを実行したときのワークフローの定義が表示されます。 

 

ジョブの実行対象ノード 

 

Nodes の Change the Target Nodes

にチェックを入れると、実行対象のノードを限定することができます。 

 

ノード localhost だけを選んで実行してみます。 

 

Summary画面ではわかりにくいですが、よく見ると Complete 100% 1/1

と、対象1ノードで、成功1ノードになっています。 

 


ジョブの詳細設定


実行対象

ジョブを発行する対象は 


  • Nodes のところで Dispatch to Nodes(各ノードに対しSSH経由で実行),

  • Execute locally(Rundeckサーバ上で実行)

から選択します。 

 

Dispatch to Nodesを選択したときは、Node Filter

で実行対象のノードを選択します。このときの指定には次のような方法があります。Node

Filter の「?」をクリックすればヘルプが表示されます。

 


Select nodes by name:名前を列挙する 

mynode1 mynode2

This will select both nodes.

Filter nodes by attribute value:属性値で選択する 


  • Include:
    attribute: value

  • Exclude:
    !attribute: value

Use Regular Expressions:正規表現で選択することができる 

hostname: dev( d+).test.com.

Regex syntax checking: 

attribute: /regex/

attribute: /regex/

Examples: 

All nodesすべてのノード

~ name: . *

Nodes tagged "production" 「production」というタグがついたノード

~ tags: production

Unix nodes OSが「unix」のノード

~ osFamily: unix



実行コマンド

実行するコマンド列はWorkflowとして設定します。 

 

ステップには2種類のタイプがあります。 


  • Node Steps : 各ノードごとに実行する

  • Workflow Steps : ノードに関係なく1度だけ実行する

各Node Steps は、以下の中から選択します。Workflow Steps

のときに選択できるのはJob Reference のみです。 


** Command - Execute a remote command 

** Script - Execute an inline script 

** Script file or URL - Execute a local script file or a script from

a URL 

Job Reference - Execute another Job for each Node 

2 Node Step Plugins

** Copy File - Copy a file to a destination on a remote node. 

** Local Command - Run a command locally on the server


error hander で、ステップがエラー終了したとき、ワークフローを打ち切るか、実行を続けるかを指定できます。また、エラー処理のためのコマンドを実行することもできます。 


コマンド実行

Commandで指定したコマンドは ssh node

'コマンド'**のように実行されます。コマンドはリモートホスト上でシェルが評価して実行されます。

 

一方、Local Commandでは、コマンドは空白で分割されたのち、直接 exec(3) される形で実行されます。このときシェルは介在しないため、単純コマンドしか実行できません。パラメータ置換やパイプライン、コマンドリストなどが必要であれば、sh -c 'コマンド' のように指定してください。


引数

Optionsでジョブの引数を宣言することができます。 

引数が取り得る値は、Allowed

Valuesで指定します。GUIからジョブを実行するときに、この値を選択することができます。 

 

引数はステップでは次のようにして参照できます。 


The option values will be available to scripts in these forms: 

Bash:

$RD_OPTION_NAME

(ローカル実行のみ。環境変数として渡されます。)

Commandline Arguments:

${option.name}

Script Content:

@option.name@


 

Node Filter で name:${option.name} のようにして使うこともできます。 


ジョブの名前

ジョブの名前は任意に指定できます。後から変更することもできます。 

ただしJob Referenceで参照しているジョブの名前を変更すると、無効な参照となるため注意が必要です。 


自動実行

Schedule to run repeatedly?

からジョブの繰り返し実行のスケジュールを設定できます。 

Crontab 形式での指定は、通常の crontab

での設定とは異なり拡張されています。 


秒 分 時 日 月 曜 年


先頭に秒、末尾に年が増えています。 

 

以下は設定画面にある See: Cron

reference


for formatting

helpのリンク先からの転載です。 

Quartz Scheduler を使っているのでしょうか? 

 

 


Format

A cron expression is a string comprised of 6 or 7 fields separated by

white space. Fields can contain any of the allowed values, along with

various combinations of the allowed special characters for that field.

The fields are as follows:

  Field Name     Mandatory   Allowed Values     Allowed Special Characters

-------------- ----------- ------------------ ----------------------------
Seconds YES 0-59 , -  * /
Minutes YES 0-59 , -  * /
Hours YES 0-23 , -  * /
Day of month YES 1-31 , -  * ? / L W
Month YES 1-12 or JAN-DEC , -  * /
Day of week YES 1-7 or SUN-SAT , -  * ? / L  #
Year NO empty, 1970-2099 , -  * /

So cron expressions can be as simple as this:

* * * * ? *

or more complex, like this:

0/5 14,18,3-39,52 * ? JAN,MAR,SEP MON-FRI 2002-2010


Special characters


  • *
    ("all values") - used to select all values within a field. For
    example, "" in the minute field means  "every minute"*.

  • ?
    ("no specific value") - useful when you need to specify
    something in one of the two fields in which the character is
    allowed, but not the other. For example, if I want my trigger to
    fire on a particular day of the month (say, the 10th), but don't
    care what day of the week that happens to be, I would put "10" in
    the day-of-month field, and "?" in the day-of-week field. See the
    examples below for clarification.

  • -


    • used to specify ranges. For example, "10-12" in the hour field
      means "the hours 10, 11 and 12".



  • ,


    • used to specify additional values. For example, "MON,WED,FRI" in
      the day-of-week field means "the days Monday, Wednesday, and
      Friday"
      .



  • /


    • used to specify increments. For example, "0/15" in the seconds
      field means "the seconds 0, 15, 30, and 45". And "5/15" in the
      seconds field means "the seconds 5, 20, 35, and 50". You can
      also specify '/' after the '' character - in this case '' is
      equivalent to having '0' before the '/'. '1/3' in the day-of-month
      field means "fire every 3 days starting on the first day of the
      month"
      .



  • L
    ("last") - has different meaning in each of the two fields in
    which it is allowed. For example, the value "L" in the
    day-of-month field means "the last day of the month" - day 31
    for January, day 28 for February on non-leap years. If used in the
    day-of-week field by itself, it simply means "7" or "SAT". But if
    used in the day-of-week field after another value, it means "the
    last xxx day of the month"
    - for example "6L" means "the last
    friday of the month"
    . When using the 'L' option, it is important
    not to specify lists, or ranges of values, as you'll get confusing
    results.

  • W
    ("weekday") - used to specify the weekday (Monday-Friday)
    nearest the given day. As an example, if you were to specify "15W"
    as the value for the day-of-month field, the meaning is: "the
    nearest weekday to the 15th of the month"
    . So if the 15th is a
    Saturday, the trigger will fire on Friday the 14th. If the 15th is
    a Sunday, the trigger will fire on Monday the 16th. If the 15th is
    a Tuesday, then it will fire on Tuesday the 15th. However if you
    specify "1W" as the value for day-of-month, and the 1st is a
    Saturday, the trigger will fire on Monday the 3rd, as it will not
    'jump' over the boundary of a month's days. The 'W' character can
    only be specified when the day-of-month is a single day, not a
    range or list of days.


The 'L' and 'W' characters can also be combined in the day-of-month

field to yield 'LW', which translates to  "last weekday of the

month" 
.



  • #


    • used to specify "the nth" XXX day of the month. For example, the
      value of "6 #3" in the day-of-week field means*"the third Friday
      of the month"* (day 6 = Friday and " #3" = the 3rd one in the
      month). Other examples: "2 #1" = the first Monday of the month and
      "4 #5" = the fifth Wednesday of the month. Note that if you
      specify " #5" and there is not 5 of the given day-of-week in the
      month, then no firing will occur that month.




The legal characters and the names of months and days of the week

are not case sensitive.

MON

is the same as

mon.




実行結果

実行結果は履歴として残り、後からAcutivity画面を見れば確認できます。 

結果には、実行時のワークフローの定義も一緒に記録されています。 

 

過去の実行履歴をみると、その時、どのような定義のワークフローで実行したかもわかるようになっています。これは、ワークフローを後から変更したときでも、過去の実行履歴は独立した記録になっていて、影響を受けないということであり、大変重要なことです。