/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우리가 할당한 프로필과 다른 빌더를 사용하는 예약된 악마가 있습니다 cron.PATH

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

여기문제에 대한 더 나은 설명과 다양한 해결 방법을 찾을 수 있습니다.

관련 정보