スクリプトを実行するアラームアクションが、vCenter Server 8.0 で “Command must exist/be executable” というエラーにより失敗する
search cancel

スクリプトを実行するアラームアクションが、vCenter Server 8.0 で “Command must exist/be executable” というエラーにより失敗する

book

Article ID: 415883

calendar_today

Updated On:

Products

VMware vCenter Server

Issue/Introduction

免責事項:これは英文の記事「vCenter Server 8.0 Alarm actions which run scripts fail with “Command must exist/be executable”」の日本語訳です。記事はベストエフォートで翻訳を進めているため、ローカライズ化コンテンツは最新情報ではない可能性があります。最新情報は英語版の記事で参照してください。


vCenter Server 8.0 以降ではセキュリティ対策が強化され、VPXD などの多くのサービスがルート権限で実行されないようになりました。vCenter Server 8.0 へアップグレードする前に作成されたアラームスクリプトが必要な OS 権限なしに実行された場合、失敗する可能性があります。

  • vCenter - /var/log/vmware/vpxd/vpxd.log に以下のエラーメッセージが記録されます。これらは、トリガーされた各アラームアクションのために実施される SchedulerTask に関連します。

    YYYY-MM-DDTHH:MM:SS.SSSZ info vpxd[17494] [Originator@6876 sub=vpxLro opID=ProcessEventNotifications-647d2f21-7eabb9ae] [VpxLRO] -- BEGIN lro-97183 --  -- ScheduledTaskLRO --
    YYYY-MM-DDTHH:MM:SS.SSSZ error vpxd[17494] [Originator@6876 sub=SysCommandPosix opID=ProcessEventNotifications-647d2f21-7eabb9ae] Invocation of process: '/root/alarmscript.sh' failed: Command must exist/be executable : /root/alarmscript.sh
    YYYY-MM-DDTHH:MM:SS.SSSZ error vpxd[17494] [Originator@6876 sub=SysCommandPosix opID=ProcessEventNotifications-647d2f21-7eabb9ae] Stream (1) is not initialized. Async/Invoke() must be called first.
    YYYY-MM-DDTHH:MM:SS.SSSZ verbose vpxd[17494] [Originator@6876 sub=MoScheduledTask opID=ProcessEventNotifications-647d2f21-7eabb9ae] [ScheduledTaskActionLRO] Failed to run script: Failed to invoke command: Stream is not initialized
    YYYY-MM-DDTHH:MM:SS.SSSZ verbose vpxd[17494] [Originator@6876 sub=MoEvent opID=ProcessEventNotifications-647d2f21-7eabb9ae] [EventManagerMo] Event[2287]: Object[datacenter-3(Datacenter1)], Type[vim.event.AlarmScriptFailedEvent]
    YYYY-MM-DDTHH:MM:SS.SSSZ info vpxd[17494] [Originator@6876 sub=vpxLro opID=ProcessEventNotifications-647d2f21-7eabb9ae] [VpxLRO] -- FINISH lro-97183
    YYYY-MM-DDTHH:MM:SS.SSSZ error vpxd[17471] [Originator@6876 sub=MoScheduledTask opID=ProcessEventNotifications-647d2f21-7eabb9ae] Script failed to execute: Command must exist/be executable : /root/alarmscript.sh

    vCenter UI の監視タブでは以下メッセージと共に vim.event.AlarmScriptFailedEvent というエラータイプのイベントが表示されます。
    • 日本語 : "<管理対象オブジェクト名> 上のアラーム <アラーム名> はスクリプトを完了しませんでした"
    • 英語 : "Alarm <alarm_name> on <managed_object_name> did not complete script"

Environment

VMware vCenter Server 8.0 以降

Cause

vCenter Server 8.0 以降にアップグレードする以前はスクリプトが動作していたという場合、失敗原因はスクリプトに適切な OS 権限が設定されていないことか、スクリプトに権限の必要なコマンドが含まれていることです。vCenter Server 8.0 からは、アラームスクリプトは VCSA Photon OS の "vpxd" ユーザーによって実行されますが、このユーザーはルート権限を持っていません。

Resolution

アラームスクリプトは VCSA Photon OS の "vpxd" ユーザー、"cis" グループによって所有されている必要があります。OS 権限は以下のようになります。
root@vcsa [ /alarmscripts ]# ls -lah alarmscript.sh
-rwxr--r-- 1 vpxd cis 45 Mar 10 10:45 alarmscript.sh

適切な OS 権限が設定されていてもスクリプトが失敗する場合、スクリプトに権限が必要な操作が含まれてないかを確認してください。"vpxd" ユーザー以上の権限が必要な操作を含むスクリプトの実行は推奨されません。
何らかの理由でルート権限でアラームスクリプトを実行する必要がある場合は、一時的に許可することが可能です。しかし、これを続けると VCSA のセキュリティが低下するため、ルート権限を不要とするようスクリプトを修正するまでに限ってください。

  1. 元の alarmscript.sh を別のファイルにコピー (例、root_alarmscript.sh)

  2. 元の alarmscript.sh を以下コマンドのみ実行するように編集

    sudo <absolute_path_to_root_alarmscript> <arguments_to_root_alarmscript>

    Note: alarmscript.sh に上記の適切な OS 権限が設定されていることを確認してください。

  3. アラームスクリプトをルート権限で実行するため、root_alarmscript.sh を sudoers ファイルに追記

    1. /etc/sudoers ファイルを編集

      visudo /etc/sudoers

    2. 以下行を追加

      vpxd ALL= NOPASSWD: <absolute_path_to_root_alarmscript> <arguments>

    3. ファイルを保存

Additional Information

スクリプトの実行が依然として失敗する場合、適切なインタープリターがスクリプト最上部に指定されているか確認してください。例として、BASH の場合は以下を使用してください。
#! /bin/bash