首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >帮助在后台运行它

帮助在后台运行它
EN

Stack Overflow用户
提问于 2010-04-25 20:35:59
回答 5查看 3.9K关注 0票数 2

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

代码语言:javascript
复制
#!/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()

它是一个套接字策略文件服务器(您可能听说过放在套接字连接上的restiction - http://www.adobe.com/devnet/flashplayer/articles/socket_policy_files.html);当像“普通”进程- "python that_server.py“一样运行时,它工作得很好,但我在后台运行它时遇到了问题。

像这样运行:"that_server.py &",-不起作用。

编辑:这是我从shell中得到的:

代码语言:javascript
复制
ircd@smoky43g:~$ ls
server.py

ircd@smoky43g:~$ sudo nohup python server.py &
[8] 19817
ircd@smoky43g:~$

[8]+  Stopped                 sudo nohup python server.py
ircd@smoky43g:~$

我运行它,然后只需按下enter按钮,它就会显示“停止”。有什么问题吗?

如果不使用sudo命令,则会发生类似的情况:

代码语言:javascript
复制
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:我在nohup.out文件中找到了这个:

代码语言:javascript
复制
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

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-04-25 21:50:23

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

代码语言:javascript
复制
$ 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
票数 1
EN

Stack Overflow用户

发布于 2010-04-25 20:42:23

试一试

代码语言:javascript
复制
nohup python that_server.py &

另外,

您正在尝试使用低于1024的端口,该端口需要特权/root访问权限。尝试更高的端口。

票数 1
EN

Stack Overflow用户

发布于 2010-04-25 21:18:19

输出结果会去哪里呢?nohup.out?那里面是什么?是否有异常跟踪?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2708212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档