/bin/sh: ntpq: 找不到命令

/bin/sh: ntpq: 找不到命令

我有这种奇怪的行为空字符串解析ntpq命令结果,但让我继续并重新关注问题:

我正在执行一个使用 shell 脚本启动的 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: 找不到命令

所以,有时我可以执行1从java程序,有时我不能。 SO 幕后正在发生一些事情。有人可以启发我吗?

答案1

我最初发布了类似的问题在StackOverflow中,认为问题可能与java编程有关,但事实并非如此。

最后我们发现发生了什么。

我的java程序是用shell脚本启动的。当我们手动执行脚本时,ntpq命令被找到并成功调用。当软件完全部署时,问题就会出现。在最终环境中,我们有一个cron预定的恶魔,它使我们的程序保持活动状态,但PATH建立者与我们分配的配置文件cron不同。PATH

PATH由 cron 使用:

.:/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

这里您可以找到问题的更好描述和各种解决方案。

相关内容