Как сделать сервис linux для python CGIHTTPServer?

1

Я запускаю python CGIHTTPServer с (server.py)

#!/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: Когда я запустил сервис, он будет жить в терминале; не возвращаясь к следующей командной строке bash. Таким образом, обслуживание прекратится после закрытия терминала. Как я могу сохранить веб-сервер активным даже после закрытия терминала?

ВОПРОС 2: Как я могу остановить эту услугу? (после того, как он будет включен в вопрос 1)

  • 1
    Это, вероятно, было бы лучше на superuser.com, но в качестве отправной точки ищите nohup, start-stop-daemon и оператор bash & .
Теги:
webserver
service

2 ответа

1
Лучший ответ

Запустите свою программу в фоновом режиме с помощью:

nohup./server.py &

Предпочтительным способом остановки вашего обслуживания является выдать команду kill с вашим PID службы в качестве аргумента.

#!/bin/sh
case $1 in
start) 
nohup ./server.py &
echo $! > ./server.pid
;;
stop) # code to stop the service
kill 'cat ./server.pid'
esac

PS start-stop-daemon, о котором идет речь, лучше, но немного сложнее.

1

Используйте диспетчер. Это намного проще, чем перенос собственного кода управления сервисом. Он включает в себя мониторинг, контроль, ограниченные перезагрузки, ведение журнала состояния, пользовательские уведомления о событиях и API XML-RPC для программного управления супервизором.

Он также запустит несколько экземпляров вашего веб-сервера - если это соответствует вашей архитектуре - с одним изменением конфигурации и даже управляет несколькими экземплярами FastCGI, которые используют один сокет.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню