/ bin / sh: ntpq: comando não encontrado

0

Eu tenho esse comportamento estranho link mas deixe-me retomar e refocar o problema:

Estou executando um programa java iniciado usando um script de shell que é assim:

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

java -jar myJar.jar &

Dentro do meu código java eu executo este comando canalizado

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

para obter o deslocamento do servidor sincronizado NTP.

Para executar um comando canalizado dentro de um programa java, eu tenho que usar a linha acima mencionada como um argumento de / bin / sh. Eu executo / bin / sh não o comando canalizado diretamente.

Isso é o equivalente que você pode lançar em um console [1]

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

Exemplo de saída de 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

Analisando-o com awk , obtenho

53.388

Geralmente vai bem, mas às vezes por razões desconhecidas [Esta é a minha pergunta] meu programa para de funcionar bem. Ele não retorna nada quando a execução do comando canalizado do console retorna um número.

Recuperando o erro do processo executado criado por java, obtive este texto

/bin/sh: ntpq: command not found

Então, às vezes eu posso executar [1] em um programa java e às vezes não consigo. Algo está acontecendo no SO por trás da cena. Alguém pode me esclarecer, por favor?

    
por RubioRic 20.10.2017 / 11:42

1 resposta

2

Originalmente postei uma pergunta similar no StackOverflow, pensando que o problema pode estar relacionado com a programação java mas não foi.

Finalmente, descobrimos o que estava acontecendo.

Meu programa java é iniciado com um script de shell. Quando executamos o script manualmente, o comando ntpq é encontrado e chamado com sucesso. O problema surge quando o software é totalmente implantado. No ambiente final, temos um demônio cron agendado que mantém nosso programa ativo, mas PATH estabelecido por cron é diferente do PATH que nosso perfil foi atribuído.

PATH usado pelo cron:

.:/usr/bin:/bin

PATH que recebemos login para iniciar o script manualmente:

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

Normalmente, ntpq está em

/usr/sbin/ntpq

Aqui você pode encontrar um melhor descrição do problema e várias soluções.

    
por 26.10.2017 / 11:15