while(True)循环中断SSH脚本

时间:2012-07-13 16:23:03

标签: python bash ssh while-loop

我正在使用自动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;'以及在整行代码的末尾放一个&符号。那里有人有什么建议吗?

2 个答案:

答案 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进程也应该终止。我不确定这是不是你问的问题,但也许它有所帮助? :)