2015-11-22 63 views
0

我想运行python脚本作为服务。因为我遵循指示here在后台运行Python脚本作为服务

初始化脚本(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() 

当我启动服务 “命令/etc/init.d/myservice.sh开始”。 它成功启动。

当我发送udp数据,但没有任何事情发生到“output.txt”。这里有什么问题?

+0

是端口18736监听? – hariK

+0

[1]手动启动时,此脚本是否按预期工作? [2]尝试将输出文件更改为具有完整路径的文件,并将其更改为'/ tmp/output.txt'等众所周知的目录。 –

+0

@ hariK是的,它听着18736 –

回答

0

这个过程在形式上被称为守护一个Python脚本。

我打算假设您的初始脚本和代码都正常工作,可能这是一个问题。

但是,除了这个问题,在守护Python脚本时使用logger类。尝试以自己的方式实施日志记录的过程中存在太多问题。

这是在例如同一链接,您提供的,到这里看看为什么:Maintaining Logging and/or stdout/stderr in Python Daemon

+0

@ AAA我在树莓派中运行这个脚本。我想通过短信将这个“数据”发送到手机。为什么我需要记录器类?该类的用途 –

+0

您目前正在将数据写入名为output.txt的文本文件。我以为你想记录你收到的数据。手动工作而不是作为服务运行的原因是因为工作目录,文件权限,在特定用户下运行的服务以及其他环境变量等因素影响更大。记录器类负责所有这些在记录你的输出时。 –

+0

@ AAA谢谢。我知道了 –