2017-10-21 28 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权限。

不要忘了阅读手册页,也许有一个选项,你需要。

相关问题