首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获得内存在主机内工作的HW信息的Python脚本,但作为运行库作业失败

获得内存在主机内工作的HW信息的Python脚本,但作为运行库作业失败
EN

Stack Overflow用户
提问于 2021-07-23 10:59:31
回答 2查看 102关注 0票数 0

我有一个定制的python脚本,它收集关于服务器主机的硬件(CPU、RAM等)的信息(容量、供应商、制造商等),并将这些信息转储到json格式化的输出文件(即memory_info.json --后来被另一个脚本用于其他东西)中。在本例中,脚本使用python 子过程来调用外部程序(如“因西” )。

在各种主机(不同的操作系统、archs等)中进行了一些测试之后,它似乎工作得很好,所以我决定对它进行配置,以便作为运行程序(用于中央管理目的)运行。运行程序任务非常简单,它只是以以下方式执行脚本:

sshpass -p ${RD_OPTION_SERVERPASSWORD} ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -q -t root@${RD_OPTION_SERVERIPADDRESS} "python3 /tmp/hw_inxi.py"

问题来了:

将其作为运行程序作业执行,将得到以下跟踪:

代码语言:javascript
复制
Traceback (most recent call last):
  File "/tmp/hw_inxi.py", line 53, in <module>
    "--output-file", "print", "--output", "json"]).strip().decode()
  File "/usr/lib/python3.7/subprocess.py", line 395, in check_output
    **kwargs).stdout
  File "/usr/lib/python3.7/subprocess.py", line 487, in run
    output=stdout, stderr=stderr)
subprocess.CalledProcessError: Command '['inxi', '-xxxm', '--output-file', 'print', '--output', 'json']' returned non-zero exit status 1.
Result: 1
Failed: NonZeroResultCode: Result code was 1
Execution failed: 2541 in project server_setup: [Workflow result: , step failures: {1=Dispatch failed on 1 nodes: [RUNDECK_SERVER: NonZeroResultCode: Result code was 1 + {dataContext=MultiDataContextImpl(map={ContextView(node:RUNDECK_SERVER)=BaseDataContext{{exec={exitCode=0}}}, ContextView(step:1, node:RUNDECK_SERVER)=BaseDataContext{{exec={exitCode=0}}}}, base=null)} ]}, Node failures: {RUNDECK_SERVER=[NonZeroResultCode: Result code was 1 + {dataContext=MultiDataContextImpl(map={ContextView(node:RUNDECK_SERVER)=BaseDataContext{{exec={exitCode=0}}}, ContextView(step:1, node:RUNDECK_SERVER)=BaseDataContext{{exec={exitCode=0}}}}, base=null)} ]}, status: failed]

Inxi已在目标计算机中安装和正确配置,二进制权限似乎可以。我的脚本运行得非常好,没有服务器内部的错误,当它作为运行程序作业执行时就会出现问题(RundeceVersion3.3.10)。

脚本中的相关代码片段如下所示:

代码语言:javascript
复制
inxi_mem = subprocess.check_output(["inxi", "-xxxm", "--output-file", "print", "--output", "json"]).strip().decode()
memory_list = json.loads(inxi_mem)

关于谁可能是罪魁祸首或如何解决上述问题,有什么想法吗?

(p.s.对不起,如果我忘了什么,这是我的第一个问题)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-07-30 08:06:02

我正在使用作业步骤来连接远程主机,因为这是使用第二个脚本和第一个脚本收集的硬件数据的唯一方法,这些数据来自我的Rundeck服务器。

这个问题似乎与环境变量有关,它是通过在inxi命令中添加“-tty”选项来解决的,就像这个问题中提到的那样。子进程命令现在看起来像下面的样子,并且工作起来很有魅力。

代码语言:javascript
复制
inxi_mem = subprocess.check_output(["inxi", "--tty", "-xxxm", "--output-file", "print", "--output", "json"]).strip().decode()
memory_list = json.loads(inxi_mem)
票数 1
EN

Stack Overflow用户

发布于 2021-07-29 22:42:53

您正在使用作业步骤连接到远程节点,一个很好的方法是:

  1. 模型源中配置远程节点。
  2. 然后,在作业中,在命令步骤调度中调用脚本--作业到节点。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68498116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档