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 が設定されていない可能性があります。スクリプトを実行する前に設定できます。

または、もちろん、別のユーザーとして実行しており、ファイルのアクセス許可が正しく設定されていません。また~/devel_funcs.py、cron が別のユーザーとしてスクリプトを実行する場合、ホーム ディレクトリを参照しません。

于 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 に答える