/bin/sh: ntpq: コマンドが見つかりません

/bin/sh: ntpq: コマンドが見つかりません

私には奇妙な行動があります。空の文字列解析 ntpq コマンドの結果、しかし、引き続き質問に再び集中します。

次のシェルスクリプトを使用して起動されたJavaプログラムを実行しています。

#!/bin/bash
export PATH=.:$PATH

java -jar myJar.jar &

私のJavaコードでこのパイプコマンドを実行します。

ntpq -c peers | awk ' $0 ~ /^\*/ {print $9}'

NTP 同期サーバーのオフセットを取得します。

Javaプログラムでパイプコマンドを実行するには、上記の行を/ bin / shの引数として使用する必要があります。コマンドをパイプするのではなく、/bin/sh を直接実行します。

これはコンソールで実行するのと同じです。1

/bin/sh -c 'ntpq -c peers | awk '"'"' $0 ~ /^\*/ {print $9}'"'"''

出力例ntpq

     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*172.30.100.1    172.22.204.171   4 u  207 1024  377    1.490   53.388  49.372

それをawk解析

53.388

一般的にうまくいきますが、時には不明な理由で[これは私の問題です]私のプログラムは正しく動作しません。数値を返すためにコンソールでパイプコマンドを実行すると、何も返されません。

Javaで生成された実行プロセスからエラーを修復すると、次のテキストが表示されます。

/bin/sh: ntpq: コマンドが見つかりません

だから時には実行することができます。1Javaプログラムでは時々できません。 SOの舞台裏で何が起きています。誰かが私を実現できますか?

答え1

私はもともと次のようなものを投稿しました。質問StackOverflowは、この質問がJavaプログラミングに関連している可能性があると思いましたが、そうではありません。

最後に、私たちは何が起こったのかを見つけました。

私のJavaプログラムはシェルスクリプトを使って起動します。スクリプトを手動で実行すると、ntpqコマンドが正常に検出され、呼び出されます。ソフトウェアが完全に展開されると問題が発生します。最終環境にはcronプログラムをアクティブに保ちますが、PATH私たちが割り当てたプロファイルとは異なるビルダーを使用する予約された悪魔がありますcronPATH

PATHクローンで使用:

.:/usr/bin:/bin

PATHスクリプトを手動で起動するためのログイン情報を取得しました。

/usr/sbin:/usr/bin:/bin:/sbin:/usr/lib:/usr/lib64:/local/users/nor:
/usr/local/bin:/usr/local/lib:.

一般ntpq的に

/usr/sbin/ntpq

ここ問題のより良い説明とさまざまな解決策を見つけることができます。

関連情報