私は無限ループを持つTalendプロセスを持っています。私はこの無限ループをより制御可能な "while"ループに置き換えたいと思っています。私の考えは、whileループが内部変数(おそらくコンテキスト変数?)を監視し、UnixのSIGINTシグナルが捕捉されるとこの変数を設定することです。TalendプロセスがSIGINTを正しくキャッチする方法は?
これは可能ですか?はいの場合はどうですか?
実行可能な代替手段はありますか?私はセンチネルファイルで作業し、そのファイルがディスク上に見つかった場合にプロセスを停止することができますが、SIGINT処理はよりクリーンになります。
技術的には、TalendプロセスはJavaアプリケーションであり、これを正しく処理するためのJavaコードを書くために、Custon tJava
コンポーネントを使用する可能性があります。
私はtJava
コンポーネントを使用してシャットダウンフックを追加しようとしました
更新:false
に私のループ条件である私はcontext.keepRunning
を設定しています。このコンポーネントでは、
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
System.out.println("Signal caught... finishing up current work and exiting.");
context.keepRunning = false;
}
});
。
これは、シャットダウンフックでコンテンツを実行するだけでなく、すぐにプロセスを終了します。コントロールはTalendプロセスに戻されません。私はループコンポーネントの後に2つのtWarn
コンポーネントを持っています。 1つはonSubjobOk
、もう1つはonSubjobError
です。どちらも、SIGINT
またはSIGTERM
信号を送信した後は実行されません。しかし、シャットダウンフックのprintln
文が実行されます。
私がこれらのシグナルを理解する限り、彼らはあなたが参照しているスレッドで直接動作します。したがって、この信号をJavaに送信すると、Javaは直ちにそれを処理し、いつものように反応します。 *何かするための*追加の方法は 'addShutdownHook'です。それでも、どんな状態でも仕事は中断されます。 * tJava *または* tJavaRow *から使用可能なファイルまたはその他のものを使用します。 – tobi6