daemonize the bot

3 views
Skip to first unread message

wq1...@gmail.com

unread,
Mar 20, 2006, 8:42:15 PM3/20/06
to confbot
Hi all:
I add some code in confbot.py to make the bot work in daemon. it
will only work under linux. take it as your own risk.

各位:
如果远程登录到linux服务器上并且启动confbot,那么在退出远程登录的时候,可能你不希望congbot也随之关闭(而是希望通过)die命令手动关闭),
我加了一些代码以达到这个目的.

注意这些代码只能在linux平台上试用.
而且可能只能使用python 2.4以上的版本.


def handler(signum, frame):
pid = waitpid(status,WNOHANG)
while pid>0:
pid = waitpid(status,WNOHANG)

def daemonize():
import signal
import fcntl
import termios
import array

signal.signal(signal.SIGTTOU,signal.SIG_IGN)
signal.signal(signal.SIGTTIN,signal.SIG_IGN)
signal.signal(signal.SIGTSTP,signal.SIG_IGN)

childpid = os.fork()
if childpid<0:
sys.exit(1)
elif childpid>0:
sys.exit(0)

os.setpgrp()

fd = os.open("/dev/tty",os.O_RDWR)
if fd>0:
buf=array.array('h',[0])
fcntl.ioctl(fd,termios.TIOCNOTTY,buf,0)
os.close(fd)
os.chdir("/")
os.umask(0)
signal.signal(signal.SIGCLD,handler)

daemonize()

//下面是老代码
readconfig()

limodou

unread,
Mar 20, 2006, 8:56:02 PM3/20/06
to con...@googlegroups.com

不过在linux下需要这样吗?不是可以通过后台运行方式来运行吗?比如:

confbot.py &

这样不行吗?

--
I like python!
My Blog: http://www.donews.net/limodou
NewEdit Maillist: http://groups.google.com/group/NewEdit

wq1...@gmail.com

unread,
Mar 21, 2006, 4:23:01 AM3/21/06
to confbot
如果放在启动脚本里面这样做也许没有问题,
但是如果是远程登录(通过ssh)到服务器上,运行程序,然后退出的话,即使你用了"&",退出(logout)的时候,系统会关闭所有这次登录运行的程序.

limodou

unread,
Mar 21, 2006, 4:25:00 AM3/21/06
to con...@googlegroups.com
On 3/21/06, wq1...@gmail.com <wq1...@gmail.com> wrote:
> 如果放在启动脚本里面这样做也许没有问题,
> 但是如果是远程登录(通过ssh)到服务器上,运行程序,然后退出的话,即使你用了"&",退出(logout)的时候,系统会关闭所有这次登录运行的程序.
>

嗯,我记得有一个什么nohup之类的用法吧。

wq1...@gmail.com

unread,
Mar 21, 2006, 4:27:29 AM3/21/06
to confbot
我也是知其然而不知其所以然.

大致上:
对于一个没有做特殊操作(屏蔽掉几个信号,关掉一些文件描述符)的linux程序,
在启动它的shell退出的时候,会收到退出信号,默认动作回是程序退出.

有对此比较熟悉的同志可以帮忙补充更专业的解释.

wq1...@gmail.com

unread,
Mar 21, 2006, 4:29:40 AM3/21/06
to confbot
nohup我试过了,结果是失败.
不知道为什么,可能不使用于python吧.

Bruce Wang

unread,
Mar 21, 2006, 6:35:27 AM3/21/06
to con...@googlegroups.com
On 3/21/06, wq1...@gmail.com <wq1...@gmail.com> wrote:
> nohup我试过了,结果是失败.
> 不知道为什么,可能不使用于python吧.
>

http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/278731
看看这个可能会有些帮助
据说要fork 两次才不会留下zombie进程

我记得Advanced Unix Programming Environment 里面讲过, 细节忘了
--
simple is good
http://brucewang.net

Reply all
Reply to author
Forward
0 new messages