【问题标题】:Run Python script in the background as a service在后台运行 Python 脚本作为服务
【发布时间】:2015-11-22 12:24:09
【问题描述】:

我想将 python 脚本作为服务运行。为此,我遵循了here 的指示。

对于初始化脚本(myservice.sh),我照原样复制。

对于 myservice.py ,

import sys, struct
from socket import *

SIZE = 1024      # packet size

hostName = gethostbyname('0.0.0.0')

mySocket  = socket( AF_INET, SOCK_DGRAM )
mySocket.bind((hostName,18736))

repeat = True
while repeat:
   (data,addr) = mySocket.recvfrom(SIZE)
   data = struct.unpack('d',data)
   data=int(data[0])

   file = open("output.txt", "w")
   file.write(str(data))
   file.close()

当我启动服务“sudo /etc/init.d/myservice.sh start”时。 它成功启动。

当我发送 udp 数据时,“output.txt”没有任何反应。这里有什么问题?

【问题讨论】:

  • 18736 端口是否在监听?
  • [1] 此脚本在手动启动时是否按预期工作? [2] 尝试将输出文件更改为具有完整路径,到众所周知的目录,例如/tmp/output.txt
  • @hariK 是的,它在 18736 收听
  • @Ron Klein 当我手动启动时它可以工作

标签: python raspberry-pi


【解决方案1】:

这个过程被正式称为守护 Python 脚本。

我将假设您的初始化脚本和代码都可以正常工作,这可能是那里的问题。

但是,除了这个问题,在守护 Python 脚本时使用记录器类。尝试以如此粗略的方式自己为后台进程实现日志记录存在太多问题。

这与您提供的示例链接相同,请查看此处了解原因:Maintaining Logging and/or stdout/stderr in Python Daemon

【讨论】:

  • @AAA 我在树莓派中运行这个脚本。我想通过短信将此“数据”发送到手机。为此我需要记录器类吗?该课程的目的是什么
  • 您当前正在将数据写入一个名为 output.txt 的文本文件。我假设你想记录你收到的数据。它手动工作而不是作为服务运行时的原因是因为有更多因素在起作用,例如工作目录、文件权限、在特定用户下运行的服务、其他环境变量等。记录器类负责记录输出时所有这些。
猜你喜欢
  • 2021-07-06
  • 2018-04-18
  • 1970-01-01
  • 2013-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多