当我尝试在ssh中使用pgrep -f <proc_name>
命令时,脚本会产生错误的结果。如何解决这个问题? (我使用RSA密钥不要问p / w)
ssh -l $UNAME $HOST bash -c "'
pgrep -f name > p_id
'"
答案 0 :(得分:1)
没有更多详细信息很难说,但我的猜测是它正在检测bash
进程。你正在这样做,远程ssh守护进程正在运行bash -c '<newline>pgrep -f name > p_id<newline>', which then runs
pgrep -f name (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'
答案 1 :(得分:0)
您没有包含脚本中的任何代码,但首先查看用户权限,它们可能是进程命令返回不同结果的原因。其他潜在的麻烦点是:
检查脚本权限并验证执行选项。确保脚本用户对运行该进程的目录具有正确的权限。
您是通过命令提示符运行命令,是否与执行脚本的用户相同?如果不是,它可能是权限。
在pgrep命令中为拥有您正在查找的进程的用户放置-u选项。或者尝试在脚本中插入sudo命令并以另一个用户身份运行pgrep,一个具有admin / root-like特权的用户。
不要忘记阅读手册页,也许你需要一个选项。