2017-10-21 25 views
0

當我試圖在ssh中使用pgrep -f <proc_name>命令通過腳本給出錯誤的結果。如何解決這個問題? (我用RSA密鑰不問P/W)通過腳本在ssh中執行pgrep -f命令會給出錯誤的結果。如何解決這個問題

ssh -l $UNAME $HOST bash -c "' 
     pgrep -f name > p_id 
     '" 
+0

用四個空格前綴代碼/數據。請看[編輯幫助](http://stackoverflow.com/editing-help)。 – Cyrus

+1

「腳本給出錯誤的結果」不是錯誤描述。 – Cyrus

+0

它不是一個錯誤描述......實際上,上面的語句給出了兩個進程ID而不是一個。當我在遠程機器上使用相同的pgrep時,它只給出一個進程ID。 – Raj

回答

1

很難說沒有更多的細節,但我的猜測是,它的檢測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' 
+0

ssh -l $ UNAME $ PRI_HOST'pgrep -f name> tmp.pid' Gordon按照您的建議嘗試。在我剛剛使用過程名稱的地方。仍然我在tmp.pid文件中獲取兩個條目。第一項是正確的,第二項(第二行)對我來說是未知的pid。 – Raj

+0

@Raj如果你手動ssh進入遠程計算機,你能看到第二個是否是一個現有的進程?另外,請嘗試'ssh ...'ps $(pgrep -f name)''並查看它打印的內容。 –

+0

不,我不是 cat/proc/58453/cmdline cat:/ proc/58453/cmdline:沒有這樣的文件或目錄。至於其他進程ID我越來越。好的,我現在就試試。謝謝。 – Raj

0

你沒有包括腳本的任何代碼,但用戶權限先來看看,它們可能是處理命令的原因返回不同的結果。其他潛在的問題點有:

檢查腳本權限並驗證執行選項。確保腳本用戶對該進程運行的目錄具有正確的權限。

您通過命令提示符運行命令,是否與正在執行腳本的用戶相同?如果不是,它可能是權限。

將-u選項放入您的pgrep命令中,讓擁有您正在查找的進程的用戶使用。或者嘗試在腳本中插入一個sudo命令,並以另一個用戶身份運行pgrep,其中一個具有admin/root權限。

不要忘了閱讀手冊頁,也許有一個選項,你需要。

相關問題