This topic has been archived. It cannot be replied.
-
工作学习 / 专业技术讨论 / Can I use pipe line in ssh? e.g: ssh remote-host "ps -ef|grep username|awk '{print $2}' "
-worlddreamer31(watershed);
2007-6-10
(#3732905@0)
-
好像不行,想抓进程表最好自己扩展snmp mib,然后用snmp 访问。
-zjx_cool(zjx);
2007-6-10
(#3732907@0)
-
为什么不行? SSH的输出是在本地机上的啊
-whatthehell(cyberman);
2007-6-11
(#3734356@0)
-
try 就知道了,呵呵,头次听说这样拿进程表的
-zjx_cool(zjx);
2007-6-11
(#3734367@0)
-
为什么你说不行呢?我试了应该可以的。不过要改成这样, ssh username@remote-host "ps -ef|grep username" | awk '{print $2}' ,而且要设置ssh不需要密码自动登陆
-isup(isup);
2007-6-11
(#3734600@0)
-
当然可以,天天都有这样的script在跑。你的问题在于$2, 而不是ssh的pipe。do this:echo "ps -ef|grep username|awk '{print $2}'"
看到结果你就明白了。
因为单引号在双引号内失去了“引用”的作用,所以无法保留$2。
如下的语句将工作:
ssh hostname "ps -ef| grep username|awk '{print "'$2'"}'"
另外,ps -ef| grep username不如 “ps -fu username“。当然,后者只会列出属于该user的进程,而不会列出程序名,程序参数中出现该用户名的进程。
-sapr3(sap_all);
2007-6-11
{360}
(#3735410@0)
-
谢谢,已经保留了您的回复。问题是这样的:老板要求一个cron自动监测一个文件服务器上的某种特定连接进程是否多于某个值,如果多于,就把多出的最老的进程杀掉。
我关心的是 ssh hostname "command" 中这个双引号引起来的整个command串是否可以包括管道,如果可以包括,整个command串是否都是在远程机上执行的。
-worlddreamer31(watershed);
2007-6-12
{253}
(#3737421@0)
-
1)ssh hostname "commnad1|command2"支持pipe;2)在引号间的|将在远端执行;3)注意单引号在双引号间将失去强制引用的作用,所以你的$符将在本地substitute;4)可以让远程壳运行本地script:你可以用一下语法之一使远程shell运行本地脚本:
ssh hostname < /usr/local/bin/scripts/script.sh
script.sh 应当是一个本地(crontab所在host)脚本文件。
或者
ssh hotname << ENDOFCMD
whatever command
you like to
put here
will be executed
remotely.
ENDOFCMD
将以上lines放入一个script文件里,然后在crontab中call这个script.
-sapr3(sap_all);
2007-6-12
{332}
(#3738735@0)
-
感觉您说的很清楚了,很感谢。
-worlddreamer31(watershed);
2007-6-13
(#3738883@0)