我在serverA上有一个bash脚本。此脚本将SSH到serverB并运行yarn top命令,提取度量并放入serverA的文件(test.txt)中。下面是我正在使用的命令:
ssh -oStrictHostKeyChecking=no -i <key> username@hostname "yarn top" | head -5 | grep -w 'Applications' | awk '{print "Pending_apps" "\t" $7}' >> test.txt
所以这里的问题是,在我的脚本运行以上命令后,它进入交互模式,并且仅当我手动提供crtl + c或quit信号/命令时退出。
无论如何,在运行上述命令并将输出重定向到test.txt之后,脚本应该移至下一个命令。也就是说,在命令提示符下运行上述命令后,应将输出重定向到test.txt文件,然后应返回到命令提示符/终端
答案 0 :(得分:0)
经典top
可以通过top -n 1
在非交互模式下运行不幸的是,我找不到yarn top
的文档
或者您可以尝试在后台(&
)中运行命令,保存其pid,等待数据并杀死它
ssh -oStrictHostKeyChecking=no -i <key> username@hostname "yarn top" | head -5 | grep -w 'Applications' | awk '{print "Pending_apps" "\t" $7}' >> test.txt & PID=$!; sleep 1; kill -s SIGINT $PID
希望ssh成功传输SIGINT
答案 1 :(得分:0)
您可以尝试通过管道echo
的输出来模拟控制台,如下所示:
(sleep $SLEEP_TIME; echo -e "q\n\n") | yarn top > yarn-top.log
这意味着:“运行纱顶,并并行,等待SLEEP_TIME
,然后输出q和两行新记录。”
只要SLEEP_TIME
小于yarn top
上的默认刷新延迟(默认为3秒),您将在yarn-top.log
中获得一个屏幕更新。如果将SLEEP_TIME
设置为大于刷新延迟,则将在SLEEP_TIME
期间获得尽可能多的更新。
您需要echo -e
才能转义换行符。您需要它们,因为yarn top
是用Java实现的。参见yarn top --help
:
- 由于该工具是用Java实现的,因此必须按Enter键才能处理按键。