帮助在后台运行它

2024-10-02 18:20:28 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是一个简单的python守护进程,我无法将其作为后台进程运行:

#!/usr/bin/env python 

import socket 

host = '' 
port = 843 
backlog = 5 
size = 1024 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.bind((host,port)) 
s.listen(backlog) 
while 1: 
   client, address = s.accept() 
   data = client.recv(size) 
   if data == '<policy-file-request/>\0': 
       client.send('<?xml version="1.0"?><cross-domain-policy><allow-access-from domain="*" to-ports="*"/></cross-domain-policy>') 
   client.close()

它是一个socket策略文件服务器(您可能听说过Adope在socket connection-http://www.adobe.com/devnet/flashplayer/articles/socket_policy_files.html)上的限制;当它像“普通”进程一样运行时——python_服务器.py“,-但我在后台运行时遇到了问题。在

像这样跑:“那_服务器.py&;“,—不起作用。在

编辑:这是我从贝壳里得到的:

^{pr2}$

我运行它,然后按回车键-它说'停止'。有什么问题吗?在

没有sudo命令,类似的情况也会发生:

ircd@smoky43g:~$ nohup python server.py &
[9] 20341
ircd@smoky43g:~$ nohup: ignoring input and appending output to `nohup.out'

[9]   Exit 1                  nohup python server.py
ircd@smoky43g:~$

编辑2:我把这个放在不出来文件:

python: can't open file 'sudo': [Errno 2] No such file or directory
Traceback (most recent call last):
  File "server.py", line 10, in <module>
    s.bind((host,port))
  File "<string>", line 1, in bind
socket.error: [Errno 13] Permission denied

更新:我已经设法使用根帐户运行它,但不能作为ircd用户(属于suddoors)。现在的问题是为什么不呢?在


Tags: py服务器clienthostserver进程bindport
3条回答

我检测了你的代码,它在这里工作得很好:

$ cat server.py
#!/usr/bin/env python 

import socket 
import sys

host = '' 
port = 843 
backlog = 5 
size = 1024 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
print >> sys.stderr, 'socket'
s.bind((host,port)) 
print >> sys.stderr, 'bind'
s.listen(backlog) 
print >> sys.stderr, 'listen'
while 1: 
    try:
       client, address = s.accept() 
       print >> sys.stderr, 'accept'
       data = client.recv(size) 
       print >> sys.stderr, 'recv'
       # ignore data because I can't type a '\0'
       client.send('<?xml version="1.0"?><cross-domain-policy><allow-access-from domain="*" to-ports="*"/></cross-domain-policy>') 
       client.close()
       print >> sys.stderr, 'close'
    except Exception as e:
        print e;
        s.close();
        print >> sys.stderr, 'close'
        sys.exit(1);
$ sudo nohup python server.py &
[1] 11218
nohup: ignoring input and appending output to `nohup.out'
$ jobs
[1]+  Running                 sudo nohup python server.py &
# a couple of telnets to 843
$ jobs
[1]+  Running                 sudo nohup python server.py &
$ sudo kill 11218
$ sudo cat nohup.out
socket
bind
listen
accept
recv
close
accept
recv
close

问题可能是权限问题,正如您在更新中提到的那样。您正在连接到端口843,这是一个特权端口——您需要是root用户才能打开它(搜索堆栈溢出以了解其他一些技术)。Sudoers并不重要,因为你不使用sudo。在

这里真正的问题是您没有看到错误,这可能会使这一点很容易弄清楚(或者至少让您指出正确的问题)。您可能需要:

(python server.py > output.txt 2>&1) &

这将在将进程置于后台之前将输出重定向到文件。在

产出去哪里了?不,出去?里面有什么?是否有异常跟踪?在

相关问题 更多 >