當我試圖在ssh中使用pgrep -f <proc_name>
命令通過腳本給出錯誤的結果。如何解決這個問題? (我用RSA密鑰不問P/W)通過腳本在ssh中執行pgrep -f命令會給出錯誤的結果。如何解決這個問題
ssh -l $UNAME $HOST bash -c "'
pgrep -f name > p_id
'"
當我試圖在ssh中使用pgrep -f <proc_name>
命令通過腳本給出錯誤的結果。如何解決這個問題? (我用RSA密鑰不問P/W)通過腳本在ssh中執行pgrep -f命令會給出錯誤的結果。如何解決這個問題
ssh -l $UNAME $HOST bash -c "'
pgrep -f name > p_id
'"
很難說沒有更多的細節,但我的猜測是,它的檢測bash
過程。你這樣做,遠程ssh守護進程正在運行bash -c '<newline>pgrep -f name > p_id<newline>', which then runs
pgrep -f名稱(with output to the file "p_id"). Note that
ps -f searches the entire command line for matches, so the "name" part of the argument to
bash`可能與自身匹配。
一種選擇是使用舊技巧來保持ps | grep something
不匹配自身:使用[n]ame
而不是僅使用name
。但是你需要引用它,所以引用比現在更加複雜。它看起來簡單的我只是跳過引用的bash -c
部分和一層:
ssh -l $UNAME $HOST 'pgrep -f name >p_id'
ssh -l $ UNAME $ PRI_HOST'pgrep -f name> tmp.pid' Gordon按照您的建議嘗試。在我剛剛使用過程名稱的地方。仍然我在tmp.pid文件中獲取兩個條目。第一項是正確的,第二項(第二行)對我來說是未知的pid。 – Raj
@Raj如果你手動ssh進入遠程計算機,你能看到第二個是否是一個現有的進程?另外,請嘗試'ssh ...'ps $(pgrep -f name)''並查看它打印的內容。 –
不,我不是 cat/proc/58453/cmdline cat:/ proc/58453/cmdline:沒有這樣的文件或目錄。至於其他進程ID我越來越。好的,我現在就試試。謝謝。 – Raj
你沒有包括腳本的任何代碼,但用戶權限先來看看,它們可能是處理命令的原因返回不同的結果。其他潛在的問題點有:
檢查腳本權限並驗證執行選項。確保腳本用戶對該進程運行的目錄具有正確的權限。
您通過命令提示符運行命令,是否與正在執行腳本的用戶相同?如果不是,它可能是權限。
將-u選項放入您的pgrep命令中,讓擁有您正在查找的進程的用戶使用。或者嘗試在腳本中插入一個sudo命令,並以另一個用戶身份運行pgrep,其中一個具有admin/root權限。
不要忘了閱讀手冊頁,也許有一個選項,你需要。
用四個空格前綴代碼/數據。請看[編輯幫助](http://stackoverflow.com/editing-help)。 – Cyrus
「腳本給出錯誤的結果」不是錯誤描述。 – Cyrus
它不是一個錯誤描述......實際上,上面的語句給出了兩個進程ID而不是一個。當我在遠程機器上使用相同的pgrep時,它只給出一個進程ID。 – Raj