0

我真的对这个问题感到困惑。我正在使用 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
4

2 回答 2

2

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

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

于 2012-08-08T10:50:43.817 回答
0

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

          • /usr/local/bin/python2.5 /home/username/startxmlrpc.py > /dev/null 2>&1
于 2012-08-08T11:19:31.017 回答