如何为Python CGIHTTPServer创建Linux服务?
我用 (server.py) 启动了 python CGIHTTPServer。
#!/usr/bin/env python
import CGIHTTPServer
def main():
server_address = ('', 8000)
handler = CGIHTTPServer.CGIHTTPRequestHandler
handler.cgi_directories = ['/cgi']
server = CGIHTTPServer.BaseHTTPServer.HTTPServer(server_address, handler)
try:
server.serve_forever()
except KeyboardInterrupt:
server.socket.close()
if __name__ == '__main__':
main()
我尝试用这个来创建一个 Linux 服务。
#!/bin/sh
case $1 in
start)
./server.py
;;
stop) # code to stop the service
esac
问题 1:当我启动这个服务时,它会一直在终端里运行,不能返回到下一个命令行。所以一旦我关闭终端,这个服务就会停止。有什么办法可以让这个网页服务器在我关闭终端后仍然保持活着吗?
问题 2:在通过问题 1 保持服务运行后,我该如何停止这个服务呢?
2 个回答
1
使用 supervisor。这比自己写服务管理代码要简单得多。它提供了监控、控制、有限的重启、状态记录、自定义事件通知,以及一个可以通过编程控制supervisor的XML-RPC接口。
如果你的架构需要,它还可以通过一次配置更改来启动多个网页服务器实例,甚至可以管理多个共享同一个套接字的FastCGI实例。
1
要让你的程序在后台运行,可以使用以下命令:
nohup ./server.py &
停止你的服务的最好方法是使用kill命令,并把你的服务的PID(进程ID)作为参数传进去。
#!/bin/sh
case $1 in
start)
nohup ./server.py &
echo $! > ./server.pid
;;
stop) # code to stop the service
kill `cat ./server.pid`
esac
附注: 评论中提到的start-stop-daemon更好用,但稍微复杂一些。