我对这个问题感到很困惑。我正在使用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
答案 0 :(得分:2)
您没有显示错误是什么,但是,从cron运行时可能没有设置PYTHONPATH。您可以在运行脚本之前设置它。
或者,当然,您是以不同的用户身份运行它,并且未正确设置文件权限。如果cron以不同的用户身份运行您的脚本,~/devel_funcs.py
也不会引用您的主目录。
答案 1 :(得分:0)
我终于明白了,我在本地使用python 2.5,我不得不像这样添加执行: