【问题标题】:Create a service for a Python script为 Python 脚本创建服务
【发布时间】:2017-06-27 13:39:15
【问题描述】:

我有一个包含如下循环的 Python 脚本:

while True:
    if p.poll(waitTime):
        if j.process() == journal.APPEND:
            for entry in j:
                process_data(entry))

目前,我的服务如下所示:

[Unit]
Description=Journald shipper
Requires=systemd-journald.service
After=systemd-journald.service

[Service]
Type=forking
ExecStart=/usr/bin/myScript.py

[Install]
WantedBy=multi-user.target

我目前遇到的问题是 «start» 命令返回超时。 这是合乎逻辑的,因为脚本永远不会完成,但服务永远不会启动:(

所以,我认为我做错了。我是否必须更改.service 文件以允许运行脚本而无需等待脚本结束,还是必须更改我的“无限”循环?

我该怎么做呢?

【问题讨论】:

  • if p.poll(waitTime): 是错误的。它应该检查脚本是否已经结束,但如果脚本失败并返回零代码则失败。请改用if p.poll(waitTime) is not None:

标签: python service systemd


【解决方案1】:

我认为可能需要一些关于您的平台的额外信息才能正确回答这个问题。我之所以这么说,是因为我个人并不熟悉您在那里所拥有的服务的格式。

但是,如果您想要一种纯 Python 方式来执行此操作,您可以使用 daemonocle 包来创建服务。 https://pypi.python.org/pypi/daemonocle

或者,按照我通常完成此任务的方式,您可以使用如下守护程序骨架: https://gist.github.com/shawnrice/11076762
使用这种方法,您需要修改此模板以运行您的脚本并将其安装到 /etc/init.d 在第一次运行守护程序脚本后,您应该能够使用标准的“服务”来控制您的服务。

【讨论】:

猜你喜欢
  • 2010-10-26
  • 2014-07-17
  • 1970-01-01
  • 1970-01-01
  • 2014-09-24
  • 1970-01-01
  • 1970-01-01
  • 2020-08-15
  • 1970-01-01
相关资源
最近更新 更多