2016-05-15 3 views
0

Ich arbeite mit einer django Webserver mit Standard-manage.py-Datei auszuführen, wie kann ich daemonize es svc mit daemontoolsWie django Server mit daemontools

Inhalt meiner Lauf-Datei in daemontools ist

#!/bin/bash 
exec setuidgid <myuser> /usr/bin/python <path/to/manage.py> runserver 2>&1 

der Inhalt des manage.py

import os 
import sys 

if __name__ == "__main__": 
    os.environ.setdefault("DJANGO_SETTINGS_MODULE","settings") 

from django.core.management import execute_from_command_line 

execute_from_command_line(sys.argv) 

Das Kind Prozess (manage.py runserver) von svscanboot abzweigt einem anderen Prozess in execute_from_command_line (von django.c importiert ore.management) -Funktion, die nicht über SVC-Befehle gesteuert werden kann. Unten ist der Prozessbaum für svscanboot.

/bin/sh /usr/bin/svscanboot 
\_ svscan /etc/service 
    \_ supervise myapp 
     \_ /usr/bin/python </path/to/manage.py> runserver 
      \_ /usr/bin/python </path/to/manage.py> runserver 

Nun, wenn ich svc ausführen -d sendet er das Signal TERM an den ersten runserver Prozess, und als Ergebnis nur, dass getötet wird und der zweite Prozess wird eine Waise Prozess, der nicht durch SVC-Befehle gesteuert werden können.

Also wie kontrolliere ich den gesamten Prozessbaum des Kindprozesses mit Daemontools?

+0

Warum möchten Sie das tun? Der Server ist nicht für den produktiven Einsatz gedacht, Sie sollten nicht versuchen, ihn automatisch auszuführen. –

Antwort

0

Dies kann durch Ausführen von Django-Server mit einer Option --noreload gelöst werden.

Django erzeugt nur dann einen anderen Prozess, wenn --noreload nicht übergeben wird und dies nur für die Entwicklungsumgebung gedacht ist.

https://github.com/django/django/blob/master/django/utils/autoreload.py#L290 

In nicht-dev Umgebung würden Sie nicht die django-Server wollen neu geladen werden, wie Sie es sonst in solchen Umgebungen zu ändern Code sein. Das Ausführen des Servers mit --noreload löst das Problem.

Es wird jedoch nicht empfohlen, den Standard-Django-Server in der Produktion auszuführen.

+0

Nein, tut es nicht. Es sollte nicht in der Produktion verwendet werden. Sie haben diesen Kommentar von einer führenden Behörde zu diesem Thema erhalten. – e4c5

Verwandte Themen