免責事項:これは英文の記事「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 権限なしに実行された場合、失敗する可能性があります。
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.shYYYY-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 initializedYYYY-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-97183YYYY-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.shVMware vCenter Server 8.0 以降
vCenter Server 8.0 以降にアップグレードする以前はスクリプトが動作していたという場合、失敗原因はスクリプトに適切な OS 権限が設定されていないことか、スクリプトに権限の必要なコマンドが含まれていることです。vCenter Server 8.0 からは、アラームスクリプトは VCSA Photon OS の "vpxd" ユーザーによって実行されますが、このユーザーはルート権限を持っていません。
アラームスクリプトは 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 のセキュリティが低下するため、ルート権限を不要とするようスクリプトを修正するまでに限ってください。
alarmscript.sh を別のファイルにコピー (例、root_alarmscript.sh)alarmscript.sh を以下コマンドのみ実行するように編集sudo <absolute_path_to_root_alarmscript> <arguments_to_root_alarmscript>
Note: alarmscript.sh に上記の適切な OS 権限が設定されていることを確認してください。/etc/sudoers ファイルを編集visudo /etc/sudoersvpxd ALL= NOPASSWD: <absolute_path_to_root_alarmscript> <arguments>
スクリプトの実行が依然として失敗する場合、適切なインタープリターがスクリプト最上部に指定されているか確認してください。例として、BASH の場合は以下を使用してください。
#! /bin/bash