Я запускаю 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)
Запустите свою программу в фоновом режиме с помощью:
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, о котором идет речь, лучше, но немного сложнее.
Используйте диспетчер. Это намного проще, чем перенос собственного кода управления сервисом. Он включает в себя мониторинг, контроль, ограниченные перезагрузки, ведение журнала состояния, пользовательские уведомления о событиях и API XML-RPC для программного управления супервизором.
Он также запустит несколько экземпляров вашего веб-сервера - если это соответствует вашей архитектуре - с одним изменением конфигурации и даже управляет несколькими экземплярами FastCGI, которые используют один сокет.
&
.