1つのUnattended Robotによる複数環境での実行について

Unattended Robotを使った実行について教えてください。以下を実現するためにどう設定すればいいのかわかりますでしょうか?

<条件>

  • 2つの専用端末A, Bがあり、それぞれでX, Yのワークフローを実行します。(AでX、BでY)
  • ワークフローの実行はXが9:00、Yが10:00に実行されるものとし、所要時間は10分、毎日実行されるものとします。(基本、XとYの実行タイミングが重複することはないと考えてください)
  • 専用端末A, Bは常時起動しているものとします。
  • 専用端末A, Bは異なるマシンテンプレートを利用しているものとします。
  • Unattended Robotのライセンスは1つとします。

<問題>
どちらかの処理が「保留中」になり、片方しか実行されません。実行されるのは、ライセンス(ランタイム)がアクティブになっている端末のワークフローのみです。

<疑問>
Unattended Robotはフローティングライセンスの認識で、ワークフローが実行されていなければ次に実行されるワークフローに割り当てられている端末に割り当てられると思っていたのですが、そうではないのでしょうか?

動作から類推するに、最初にOCに接続した端末(ホスト)がライセンス(ランタイム)を確保、保持し続けるように見えるため、その端末でワークフローが実行中でなくてもほかの端末でワークフローを実行することはできない(ライセンスを握っている端末でライセンスを無効化するなり、端末をシャットダウンさせるなりしない限りは)、となります。

しかも、これが端末単位で実施されるため、例えば1つのマシンテンプレートで複数端末を設定していたとしても、その中で最初にOCに接続してライセンス(ランタイム)を確保したものが握り続ける、となります。

Unattended Robotは決して安いものではないので、これでは人手がかからず完全無人状態で運用するためにはそれぞれの端末に対してUnattended Robotのライセンスを購入する必要が出てきて、非常にコスト効率の悪い製品に見えます。(人手というのは、いちいちOC上でライセンス(ランタイム)の無効化をしてやらないといけない)

何かやり方や設定を間違っているのでしょうか・・・。
もしくは、ワークフローを完了した時点でライセンス(ランタイム)を解放させる手順があれば教えてください。

OSのセッションが解放されていないと思います。
実行前は誰もログインしていない状態(切断も不可)になっていますでしょうか?

@Yoichi さん、
いつもありがとうございます。セッションは残っていないですね。明確にコマンドを使っての確認はできていないですが、少なくともコンソール、RDPでのログインはしていない状態です。

念のためロボットマシンをすべて再起動してやってみました。

(やったこと)

  • 3つのマシン(UP2019A, UP2019B, UP2019C)を記載の順番ですべて再起動。(以降、ログインなど一切せず、触らず)
  • 2つのマシン(UP2019B, UP2019C)が所属するマシンテンプレート(UP2019BC)を使い、実行するマシンを指定した状態でジョブ登録。
  • UP2019BでDemoワークフローを5回設定(優先度中)
  • UP2019CでDemo_Highワークフローを2回設定(優先度高)

(結果)
UP2019Aにランタイムが割り当てられている状態となり、ジョブがすべて保留状態で何も実行されず。

↓ ランタイムの割り当て状態(UP2019Aに割り当てられている)


↓マシンの接続状態(すべてAutomation Cloudに接続済み)

↓ジョブの実行状況(設定したものがすべて保留)

とりあえずマシンテンプレートは1つにして、それを各ホストに紐づけてみてもらえますか?

@Yoichi さん、

移動中なので、検証は帰ってからやります。少々お待ち下さい。

なお、ドキュメントポータルで気になる記載があり、やはり希望しているような使い方はできないのではないかと思いました。

以下、引用—
Robot サービスが開始するとすぐに、マシンはライセンスを消費します。ライセンスがすぐに消費されるのを防ぐには、該当する [ライセンス] ページでマシンを無効化します。無効化されたマシンでは Studio も Robot も使用できないため、注意が必要です。
—以上、引用

要するに、ジョブは関係なく、端末が上がってrobotサービスプロセスがOCに接続した時点でランタイムが割り当てられると同時にライセンスも消費されるという事ですよね…。

マジか…。

違います。実際に当該端末に実ユーザーでログインしても、Assistant のライセンスステータスは黄色でUnattended 接続表示になっていて実行はできない状態かと思います。つまりランタイムは消費されていません。もしこの状態で緑になっているようでしたら、設定の問題で消費されてしまっているかもしれません。

@Yoichi さん、
補足、ありがとうございます。

確認ですが、頂いているコメントの中で「当該端末」とはどれを指しますか?私の検証環境でいう「UP2019A」(ランタイムが割当たっているとしている端末)でよろしいですか?

実ユーザ(この場合R01というUP2019ローカルアカウント(ロボットアカウント))でUP2019Aにサインインするとステータスは黄色で「Unattendedとして接続済み」というメッセージが出てきます。これは、別のUP2019Bでも同様でした。

ちなみに、UP2019B、UP2019Cで保留で実行できない状態で、UP2019Aでジョブ実行させると、即動き出します(2回実行するよう設定しています)。


↓その後、UP2019Aに割り当てている処理は成功で終わっていますが、UP2019BやUP2019Cに割り当てている処理は保留中のままです。

この状態で正しいと思います。つまりサービスは立ち上がっていてもランタイムは消費されていないということです。

ちなみに、UP2019B、UP2019Cで保留で実行できない状態で、UP2019Aでジョブ実行させると、即動き出します(2回実行するよう設定しています)。

現在マシンテンプレートは1つでその接続情報をUP2019A,UP2019B,UP2019Cにて設定している状態でしょうか?もしまだでしたら、一旦マシンテンプレートは一つににして、そこにランタイムを振るようにしてみてはと思います。

@Yoichi さん、

マシンテンプレート1つにして、検証してみましたが、結果NGでしたね。新たにマシンテンプレートを作成して、すべてそこに改めて紐づけるやり方で実施しています。

下から順にジョブ登録(Demoの処理を5回繰り返す)していて、あえて最後に起動したマシンの順番でアサインしましたが、結局一番最初に起動したマシン(UP2019B)に割り当てたジョブだけが実行され、その後他のジョブに関してはずっと保留中になっています。(途中でUP2019Aが「停止」となっているのは設定誤りでジョブ削除しただけなので、無視してください。また、UP2019Bで実行しているホスト名でUP2019A\RB01となっていますが、すべてのホストでユーザIDとPWを同じにしているので、これも気にしないでください。

今回、お客様への提案、デモを準備する過程で検証をしていたのですが、UiPathのサポートにも確認しました。結果、やはり希望している使い方はできず、先に私が投降した通りの内容でした。ご参考までに転記しておきます。

■運用内容:

  1. 1つのマシンテンプレートを作成し、1つのUnattendedのランタイムライセンスを割り当てます
  2. 2台の端末(端末A、端末B)において、1で作成したマシンテンプレートのキーでOrchestratorに接続します。
    端末Aでランタイムライセンスを消費します。ジョブの実行ができます。
    端末Bはランタイムライセンスがないためジョブの実行ができません(保留中となります)
  3. 端末Aがシャットダウン等、障害が発生した場合に端末Aのランタイムライセンスが解放され、端末Bがそのライセンスを利用できる状態になります。

ご留意頂きたい点として、ランタイムライセンスを消費している端末がOrchestratorに接続できている場合
ランタイムライセンスを消費している状態のため、上記の通り端末Bでは実行できません。
ランタイムライセンスを解放する条件として、以下のような状況が必要となります。
・端末がシャットダウンされる
・AssistantからOrchestratorへの接続を切る
・以下リンクのように、Orchestratorの設定画面から対象の端末を非アクティブにする

マシンを有効/無効化する
Orchestrator - ライセンスを管理する

上記の通り、1つのライセンスで2台の端末を使用する場合、片方のライセンスを解放する必要がございます。

以上です。

こんにちは

手元で同様の環境構築してみましたが、確かにライセンスがリリースされませんね。失礼しました。
上記の挙動のようなので、例えばログオフスクリプトでゴニョゴニョすれば、切り替えできそうな感じではありますが(適当に組んだスクリプトで試しましたが動作しそうな感じではありましたが)動作保証的には微妙なので、悩ましいところではあります。

@Yoichi さん、
検証ありがとうございます。改めて裏取りができたということで安心しました。

いただいた提案についてですが、ちょっと罠がありそうで、マニュアルのどこかにライセンスを持っていない端末はハートビートのタイミングでライセンス取得をする仕様という記載があったのを覚えています。

↑ ここに最後に注記としてありました。
引用:マシンがオンラインであってもライセンスされていない場合は、マシンは各ハートビートでランタイムを取得しようとします。

となると、何らかの方法で保持しているライセンスを解放させたとしても、ほかの端末で一番早くハートビートしたタイミングでその端末にライセンスが割り当てられてしまう動きになります。なかなか一筋縄ではいかなそうです・・・。

あと、マニュアルの同じページの以下記載ですが、誤解を招きやすいですね。


3.は「解放します」ではなくて、「解放させます」とすべきですし、4.に関しても残りの2台のハートビートが先に来れば、の話で、先行した3台のハートビートが先に発生したらこうならないはずです。

こんにちは

同じマシンテンプレートで紐づけているとそうなってしまうので、マシンテンプレートは分けたうえで、それぞれのマシンテンプレートのライセンス数をコントロールすればできそうな感じですが、いずれにしても仕組みが複雑になりそうですし、これなら外部のスケジューラー使った方が良いレベルかもしれません...

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.