SYSADMIN.execExternalProcess

このプロシージャは、シェルスクリプトまたは外部プログラムを実行します:

SYSADMIN.execExternalProcess(IN command string NOT NULL, IN args object, OUT exitCode integer RESULT, OUT stdOut clob, OUT stdErr clob)

コマンド(実行されるスクリプトの絶対名)と引数のリスト(NULLの場合もある)を受け取り、外部プロセスへの呼び出しの終了コードと、stdoutstderrに送られたコマンドの結果を表す整数を返します。標準出力と標準エラーの結果は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