我正在使用自动SSH脚本通过SSH将硬件测试复制/运行/记录到几台计算机上,除了一件事,一切正常。测试文件应该每30分钟无限期运行并收集数据,然后将其写入文件直到被杀死。缺乏一个更好的例子:
注意:这些文件都不是实际代码。我没有在我面前复制它。
file.py:
#!/usr/bin/env python
import os
idleUsage = []
sleepTime = 1800
while(True):
holder = os.popen('mpstat | awk \'{printf("%s\n", $9)}\'')
idleUsage.append(100.0 - float(holder[1]))
f = open("output.log", 'w')
f.write(%idleUsage)
f.close()
sleep(sleepTime)
automatic-ssh.sh:
#!/bin/bash
autossh uname1 password1 ip1 command <----gets stuck after ssh runs
autossh uname2 password2 ip2 command
autossh uname3 password2 ip3 command
没有失败,它会停止运行命令。我试过'命令&amp;'以及在整行代码的末尾放一个&符号。那里有人有什么建议吗?
答案 0 :(得分:1)
不确定您当前的背景但我建议您使用subprocess:
from subprocess import Popen
p1 = Popen(["sar"], stdout=PIPE)
p2 = Popen(["grep", "kb"], stdin=p1.stdout, stdout=PIPE)
p1.stdout.close() # Allow p1 to receive a SIGPIPE if p2 exits.
output = p2.communicate()[0]
答案 1 :(得分:0)
那么,你的shell脚本通过ssh连接到一台远程机器并运行一个无休止的python命令,你想让ssh连接进入后台吗?
#!/bin/sh
ssh thingie 1 > out.1 &
ssh thingie 2 > out.2 &
ssh thingie 3 > out.3 &
wait
这将在后台登录到单个文件时启动三个ssh命令,然后脚本将等待它们全部退出(wait
,如果没有给出pid作为参数,则等待所有子节点出口)。如果你终止了脚本,那么子ssh进程也应该终止。我不确定这是不是你问的问题,但也许它有所帮助? :)