Python SimpleXMLRPC从Crontab启动时失败,但在本地shell启动时失败

时间:2012-08-08 10:37:59

标签: python simplexmlrpcserver

我对这个问题感到很困惑。我正在使用python的SimpleXMLRPC为Web应用程序提供服务。

问题在于,当我从命令行启动我的xmlrpc服务器时,一切都运行顺畅,但是当它通过crontab启动时却没有。

我试图通过睡眠保持启动并检查/ sys / class / net / eth0 / device / net / eth0 / operstate但没有运气。

请附上脚本的来源:

#!/usr/local/bin/python2.5
# -*- coding: utf-8 -*-
# License: GNU
# startxmlrpc.py: startup script for xmlrpc server to deal with processing

## {{{ http://code.activestate.com/recipes/439094/ (r1)
import socket
import fcntl
import struct

def get_ip_address(ifname):
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    return socket.inet_ntoa(fcntl.ioctl(
        s.fileno(),
        0x8915,  # SIOCGIFADDR
        struct.pack('256s', ifname[:15])
        )[20:24])
## end of http://code.activestate.com/recipes/439094/ }}}

import xmlrpclib
import urllib2
import os
from SimpleXMLRPCServer import SimpleXMLRPCServer
from time import sleep

def send(img1,img2,lib,filters):

    global HOST_IP

    path = '/var/www/%s/' % MD5Cypher(HOST_IP)
    makedirs(path)
    print "Path: %s" % path

    if lib=='devel':
        os.system("""python ~/devel_funcs.py %s %s "%s" &""" % (img1_path,img2_path, filters))

    if lib=='milena':
            import milena_funcs
            milena_funcs.mln_process(img1_path, filters)

    return HOST_IP + '/' + path.split('/var/www/')[1] + 'out.pgm'


while open('/sys/class/net/eth0/operstate').read().strip() != 'up':
    sleep(5)

HOST_IP = get_ip_address('eth0')
server = SimpleXMLRPCServer((HOST_IP, 7070))
server.register_function(send)
server.serve_forever()

如果我在干净启动后尝试启动我的进程,这是我得到的错误:

<class 'xmlrpclib.Fault'>: <Fault 1: "<class 'xmlrpclib.ProtocolError'>:<ProtocolError for 192.168.0.5:7070/RPC2: -1 >"> 
      args = () 
      faultCode = 1 
      faultString = "<class 'xmlrpclib.ProtocolError'>:<ProtocolError for 192.168.0.5:7070/RPC2: -1 >" 
      message = ''

如果我杀了它并再次运行它就可以了。

这是crontab:

usrmln@Slave1:~$ crontab -l
# m h  dom mon dow   command
* * * * * python ~/master_register.py > /dev/null 2>&1
* * * * * python ~/startxmlrpc.py > /dev/null 2>&1
0   5 * * * find /var/www/ -type d -mtime +3 -exec rm -rf {} \; > /dev/null 2>&1

2 个答案:

答案 0 :(得分:2)

您没有显示错误是什么,但是,从cron运行时可能没有设置PYTHONPATH。您可以在运行脚本之前设置它。

或者,当然,您是以不同的用户身份运行它,并且未正确设置文件权限。如果cron以不同的用户身份运行您的脚本,~/devel_funcs.py也不会引用您的主目录。

答案 1 :(得分:0)

我终于明白了,我在本地使用python 2.5,我不得不像这样添加执行:

          • /usr/local/bin/python2.5 /home/username/startxmlrpc.py> / dev / null 2&gt;&amp; 1