SYSADMIN.execExternalProcess
このプロシージャは、シェルスクリプトまたは外部プログラムを実行します:
SYSADMIN.execExternalProcess(
IN
command string
NOT
NULL
,
IN
args object,
OUT
exitCode
integer
RESULT,
OUT
stdOut clob,
OUT
stdErr clob)
コマンド(実行されるスクリプトの絶対名)と引数のリスト(NULLの場合もある)を受け取り、外部プロセスへの呼び出しの終了コードと、stdout
とstderr
に送られたコマンドの結果を表す整数を返します。標準出力と標準エラーの結果は100,000文字に制限されていることに注意してください。
WindowsとLinuxのどちらのオペレーティング・システムでも、スクリプトへのパスはスラッシュを使って指定できます。WINDOWでは、パスはバックスラッシュを使って指定することもでき、2つ目のバックスラッシュでエスケープします。
Examples
1. スラッシュの使用例
SELECT
*
FROM
(CALL execExternalProcess(command =>
'/tmp/shellScripts/shellScript.sh'
), args =>
null
) a
2. エスケープされたバックスラッシュを使用した例
SELECT
*
FROM
(CALL execExternalProcess(command =>
'D:\\tmp\\shellScripts\\shellScript.bat'
, args => ARRAY(
'c:'
))) a
ストアドプロシージャの実行中に失敗した場合(ファイル名が存在しない場合など)、例外がスローされます。
Using execExternalProcess to Control Execution of Dependent Schedules
このストアドプロシージャを使用して依存するスケジュールの実行を制御するには、以下のSQL スクリプトを使用してジョブを作成します:
BEGIN
IF (
NOT
EXISTS (
SELECT
*
FROM
(CALL execExternalProcess(command =>
'D:/tmp/shellScripts/shellScript.bat'
, args => ARRAY(
'c:'
))) a
WHERE
exitCode = 0))
ERROR
'failed'
;
END
前述のコードでは、スクリプトD:/tmp/shellScripts/shellScript.batが成功した終了コードとして、例えば0
を返すと仮定しています。終了コードが0
と異なる場合、ジョブは失敗し、その状態は依存するスケジュールの実行を決定するために使用することができます。
This stored procedure can be potentially dangerous since any kind of script could be executed by the system.
デフォルトでは、このストアドプロシージャは(SYSADMIN
の他のシステムプロシージャと同様に)ユーザadminには表示されますが、新しく作成されたユーザー/ロールには表示されません。
SYSADMIN.executeCli
このプロシージャは、script
パラメータで渡された任意のJBoss CLI スクリプトを実行します。例えば、for logging tasks。
スクリプトの各コマンドは異なる行にあります(LF文字で区切られています):
SYSADMIN.executeCli(
IN
script string
NOT
NULL
,
IN
maskInLogs boolean
DEFAULT
'false'
)
maskInLogs
パラメータを使用すると、スクリプトに機密データが含まれている場合に、サーバーの Logging テーブルと Logging ファイルでスクリプトを隠すことができます。
maskInLogs
parameter of the SYSADMIN.executeCli procedure available since v4.7
Example
この例では、このプロシージャを使用してConfiguration SMTP サーバーを取得します:
SELECT
xpathvalue(x.reply,
'/r/result/host'
)
AS
host,
CAST
(xpathvalue(x.reply,
'/r/result/port'
)
AS
integer
)
AS
port
FROM
(
SELECT
jsontoxml(
'r'
,
replace
(reply,
'=>'
,
':'
))
AS
reply
FROM
(
CALL executeCli(
script => E
'/socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=mail-smtp:read-resource'
)
) a
) x