から実行したときにブロックのみトリガー場合、私はbashスクリプトを実行するためにjava.lang.ProcessBuilderを使用するJavaアプリケーションを持っています。バッシュ-z ProcessBuilderを
LOG.info("PlatformID = " + platformId);
LOG.info("oldWorkflow date = " + oldDate.toString() + " workflow = " + oldWorkFlowId);
LOG.info("newWorkflow date = " + newDate.toString() + " workflow = " + newWorkFlowId);
final ProcessBuilder pb = new ProcessBuilder(exportScriptLoc, platformId, oldWorkFlowId, newWorkFlowId);
pb.directory(new File("/opt/nis/ddziak-dev/nis-hadoop"));
final Process p = pb.start();
p.waitFor();
final int exitValue = p.exitValue();
p.destroy();
if (exitValue == 0) {
ログを使用して、ProcessBuilderの入力を確認しました。
15:33:04987 INFO [プール-4-スレッド-1] DapWatcher - PlatformID = 10191
15:33:05013 INFO [プール-4-スレッド-1] DapWatcher - oldWorkflow日付= 2017-11-16T19:13:46.000Zワークフロー= 00047916
15:33:05,013 INFO [pool-4-thread-1] DapWatcher - newWorkflow date = 2017-11-16T21:03:42.000Z workflow = 00050837
このスクリプトは次のとおりです。
このスクリプトからPATITIONSのエコーで#!/bin/bash
echo "hive -S -e \"show partitions nis.subscribers partition(destinationPlatformId='$1', build='$2');\"|awk '{if(NR>1)print}'" >> subscribers.out
PARTITIONS=`hive -S -e "show partitions nis.subscribers partition(destinationPlatformId='$1', build='$2');"|awk '{if(NR>1)print}'`
if [ -z "$PARTITIONS" ]
then
exit 2
fi
echo "${PARTITIONS}"
hqlOut=`hive -S -hiveconf destPlatId=$1 -hiveconf newWorkFlowId=$3 -hiveconf oldWorkFlowId=$2 -f /opt/nis/ddziak-dev/nis-hadoop/dapLib/updateSubscriberHiveTable.hql`
newPARTITIONS=`hive -S -e "show partitions nis.subscribers partition(destinationPlatformId='$1');"|awk '{if(NR>1)print}'`
if [ -z "$newPARTITIONS"]
then
exit 3
fi
私はそれは私がエコーされたコマンドを実行すると、それは
destinationplatformid=10191/build=00047916
を返し
hive -S -e "show partitions nis.subscribers partition(destinationPlatformId='10191', build='00047916');"|awk '{if(NR>1)print}'
Javaプログラムから同じ入力に渡して確認されました私は、直接それが正常にcomple
updateSubscriberHiveTable.sh 10191 00047916 00050837
を使用してスクリプトを呼び出すときテス。しかし、Javaプログラムがp.exitValueから2番出口を取得し続ける()
Javaプログラムが2番出口を取得している理由は、誰もが知っていますか?