jak zrobić pełen wdzięku uwsgi przeładować za pomocą skryptu bash?

9

Mam aplikację django, która wykonuje skrypt bash. Wymagam ponownego uruchomienia serwera nginx, więc działam, /etc/init.d/nginx reloadco działa świetnie. Używam restart uwsgido uwsgi, ale muszę wykonać płynne przeładowanie zamiast twardego restartu serwera.

W jaki sposób mogę to zrobić?


Ja obecnie uruchomiony bash reload uwsgifunkcji dzięki subprocess.popen. Wydaje się, że przeładowuje tylko proces wywołujący podproces, a nie wszystkie witryny hostowane przez instancję uwsgi. importing uwsgii działa uwsgi.reloadwydaje się również tylko efekt procesu wywołującego. Czy istnieje przełącznik dla uwsgi poprzez python lub bash, który pozwala zrestartować cały proces uwsgi

darren
źródło

Odpowiedzi:

0

Możesz to zrobić w Pythonie

import uwsgi
uwsgi.reload()
Mikrofon
źródło
uwsgi.reload () działa sporadycznie. wydaje się, że restartuje serwer zanim niektóre z moich procesów zostaną zakończone. Uruchomię to za pośrednictwem aplikacji django i chcę, aby zrestartował cały serwer.
darren
10

SIGHUP

Możesz ponownie uruchomić uWSGI, wysyłając sygnał SIGHUP do procesu uWSGI w następujący sposób:

kill -HUP <process-id>

Jeśli chcesz zautomatyzować to w skrypcie bash, możesz poprosić uWSGI o zapisanie jego identyfikatora procesu poprzez podanie pidfileopcji, na przykład:

--pidfile=/tmp/uwsgi.pid

Następnie możesz ponownie załadować proces poprzez:

uwsgi --reload /tmp/uwsgi.pid

przeładowanie dotykowe

Możesz również uruchomić uWSGI z touch-reloadargumentem, który określa plik, który po dotknięciu powoduje ponowne załadowanie uWSGI:

--touch-reload=/some/file

Następnie uWSGI przeładuje się po dotknięciu pliku:

touch /some/file

Pamiętaj, że możesz przeładować uWSGI tylko wtedy, gdy jest uruchomiony w trybie procesu głównego, ale zwykle tak jest.

Więcej informacji: http://uwsgi-docs.readthedocs.io/en/latest/Management.html#reloading-the-server

gitaarik
źródło