如何为Python CGIHTTPServer创建Linux服务?

1 投票
2 回答
1407 浏览
提问于 2025-04-17 07:39

我用 (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更好用,但稍微复杂一些。

撰写回答