首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从服务调用Python子进程失败

从服务调用Python子进程失败
EN

Stack Overflow用户
提问于 2020-01-09 10:43:14
回答 2查看 184关注 0票数 0

下面是简单的脚本,用于列出ssh-agent中的键:

list_keys.sh

代码语言:javascript
复制
#!/bin/bash
ssh-add -l

list_keys.py

代码语言:javascript
复制
if __name__ == '__main__':
    """
    Creates log
    """
    ...

    print("Start")
    print subprocess.check_output(["/root/list_keys.sh"])

当直接从终端呼叫时,它工作得很好。

代码语言:javascript
复制
$python list_keys.py

日志按预期显示:

代码语言:javascript
复制
Start
2048 SHA256:+gkk***************************nQ .ssh/my_key (RSA)

但当我试图让它成为服务,它失败了。

代码语言:javascript
复制
Start
Traceback (most recent call last):
  File "/root/list_keys.py", line 43, in <module>
print subprocess.check_output(["/root/list_keys.sh"])
  File "/usr/lib64/python2.7/subprocess.py", line 575, in check_output
raise CalledProcessError(retcode, cmd, output=output)
subprocess
.
CalledProcessError
:
Command '['/root/list_keys.sh']' returned non-zero exit status 2

服务配置:

list_keys.service

代码语言:javascript
复制
[Unit]
Description=List Keys Service
After=multi-user.target
Conflicts=getty@tty1.service

[Service]
Type=simple
ExecStart=/usr/bin/python /root/list_keys.py
StandardInput=tty-force

[Install]
WantedBy=multi-user.target

我正在开发Centos 7,知道如何将list_keys.py作为服务吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-10 01:45:09

结果发现问题不在子过程中。当脚本从服务调用时,它有一个不同于终端的会话。这就是为什么"ssh-add -l“由于没有在该会话中建立ssh代理而失败的原因。在"list_keys.sh“中添加脚本来建立ssh代理解决了我的问题。

how to establish ssh-agent上参考。

python子进程与其无关。

票数 0
EN

Stack Overflow用户

发布于 2020-01-09 10:47:29

您很可能忘记了shell文件中的执行位,很容易通过以下方法修复:

代码语言:javascript
复制
chmod +x list_keys.sh

下一个候选人将是通往ssh-add的完整路径

代码语言:javascript
复制
/usr/bin/ssh-add
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59662169

复制
相关文章

相似问题

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