0

我正在使用自动 SSH 脚本通过 SSH 将硬件测试复制/运行/记录到几台计算机上,除了一件事外,一切正常。测试文件应该每 30 分钟无限期地运行一次并收集数据,然后将其写入文件直到被杀死。由于缺乏更好的例子:

注意:这些文件都不是实际代码。我面前没有它来复制它。

文件.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)

自动 ssh.sh:

#!/bin/bash

autossh uname1 password1 ip1 command <----gets stuck after ssh runs
autossh uname2 password2 ip2 command
autossh uname3 password2 ip3 command

毫无疑问,它会卡在运行命令上。我已经尝试过“命令&”以及在整行代码的末尾放置一个&符号。有大佬给点建议吗?

4

2 回答 2

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]
于 2012-07-13T16:57:28.003 回答
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 进程也应该终止。我不确定这是否是您要问的,但也许它有帮助?:)

于 2012-07-13T17:53:01.107 回答