次のコードのように、挿入後にPerlスクリプトを呼び出すトリガーを記述したいと思います。
create trigger example after insert on radacct
for each row begin
set @rs=sys_exec(CONCAT('/usr/bin/perl','/usr/bin/p2.pl'));
end
トリガーは正常に実行されますが、Perlスクリプトが実行されず@rs
、挿入後の値はゼロです。
これはあなたの質問に答えないかもしれませんが、UDF を含まない別の方法を提供します。
UDF を呼び出す代わりに、実行キューにデータを設定するトリガーを作成します。トリガーから呼び出される代わりに、perl スクリプトがそのキューをポーリングして空にするようにします。これにより、はるかに堅牢なシステムが構築されます。
UDF をトリガーに追加すると、データベースが危険にさらされ、通常のトリガーと同じ予測可能な時間内に動作しない可能性のある外部部分が導入されます。呼び出し全体が sys_exec の終了を待っていることに注意してください。
まず、上記のアンドレアスの回答に同意しました。
トリガーは通常、データがコミットされた後に起動されます。トリガーにバックグラウンドで実行させるために、最後に ("&") を追加することで、動作/実行することができます。何かのようなもの:
set @rs=sys_exec(CONCAT('/usr/bin/perl','/usr/bin/p2.pl',' &'));