Bash
/bin/sh: ntpq: 找不到命令
我有這種奇怪的行為Empty string parsing ntpq command result,但讓我繼續並重新關注問題:
我正在執行一個使用 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
通常情況良好,但有時原因不明
$$ This is my question $$我的程序停止正常工作。當從控制台執行管道命令返回一個數字時,它什麼也不返回。 從java創建的執行程序中恢復錯誤,我得到了這個文本
/bin/sh: ntpq: 找不到命令
所以,有時我可以從 java 程序執行1,有時我不能。SO在幕後發生了一些事情。有人可以啟發我嗎?
我最初在 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
在這裡,您可以找到對問題的更好描述和各種解決方案。