【问题标题】:Paramiko exec_command not behaving as expected [duplicate]Paramiko exec_command 未按预期运行[重复]
【发布时间】:2017-06-02 17:24:12
【问题描述】:

我有一个 Python 脚本来启动一组 WebLogic 服务器的节点管理器。执行此操作的主要调用如下:

stdin, stdout, stderr = client.exec_command('/app/oracle/Middleware/Oracle_Home/user_projects/domains/base_domain/bin/startNodeManager.sh')

这将启动服务器上的进程,但是当我尝试通过 WLST 的 nmConnect() 连接到节点管理器时,我收到节点管理器不工作的错误。但是一台机器可以工作......

我从另一台机器上的脚本运行它。该脚本使用第三方 paramiko Python 库 ssh 进入远程机器,然后调用上述命令。这个问题的一个有趣部分是该程序在ps -ef | grep nodemanager 中运行。但是,当我尝试发出 nmConnect() 时,如果我自己从操作系统手动启动节点管理器,我将无法正常连接。

【问题讨论】:

  • 在传递给exec_command()时不要将\n附加到命令中。
  • 我的意思是它不会启动或停止节点管理器。有时它会打印一些 shell 输出,有时它什么也不打印。没有错误被抛出。
  • 我去掉了 \n 换行符,但它仍然不起作用。我尝试像普通的 linux 可执行文件一样在前面添加一个点:./program,但这也不起作用。
  • 我删除了新行,它有点工作。这些进程在内存中开始,但是当我尝试连接到节点管理器时,我收到 2 台或 3 台测试服务器的错误。 ://

标签: python weblogic paramiko


【解决方案1】:

startNodeManager.sh 是否会输出多于几行的输出?如果是这样,我的猜测是执行期间的进程阻塞,因为您没有读出它的输出......

关于通过 paramiko 执行命令的正确方法,我建议查看:http://stackoverflow.com/a/32758464

【讨论】:

  • 是的,有大量的输出。如果我等待输出,我编写的程序就坐在那里。如果我不关心程序在内存中启动的输出,但我无法访问启动的服务器并使用它。这是一个复杂的问题,我解释它可能不会让它更容易理解。感谢您的答复。我去看看超链接!
猜你喜欢
  • 2017-10-23
  • 1970-01-01
  • 1970-01-01
  • 2021-07-23
  • 1970-01-01
  • 2021-03-23
  • 2014-10-02
  • 2018-06-06
  • 1970-01-01
相关资源
最近更新 更多