2013-07-19 31 views
34

Napisałem moduł w Pythonie i chcę, aby działał nieprzerwanie po uruchomieniu i trzeba go zatrzymać, gdy potrzebuję zaktualizować inne moduły. Prawdopodobnie użyję monitora, aby go zrestartować, jeśli moduł się zawiesił lub nie działa.Demon kontra Upstart dla skryptu Pythona

Przechodziłem przez różne techniki, takie jak Daemon, Upstart i wiele innych.

Jaki jest najlepszy sposób, aby korzystać z tego podejścia przez wszystkie moje nowe moduły, aby móc je uruchamiać na zawsze?

Odpowiedz

67

Z Twojej wzmianki o Upstart przyjmuję, że to pytanie dotyczy usługi uruchamianej na serwerze Ubuntu.

Na serwerze Ubuntu, praca na starcie jest naprawdę najprostszą i najwygodniejszą opcją do tworzenia zawsze włączonej usługi, która uruchamia się we właściwym czasie i może zostać zatrzymana lub przeładowana znanymi komendami.

Aby utworzyć usługę typu "upstart", należy dodać pojedynczy plik do numeru /etc/init. Nazywa się <service-name>.conf. Przykładowy scenariusz wygląda następująco:

description "My chat server" 
author "[email protected]" 

start on runlevel [2345] 
stop on runlevel [!2345] 

env AN_ENVIRONMENTAL_VARIABLE=i-want-to-set 

respawn 

exec /srv/applications/chat.py 

Oznacza to, że za każdym uruchomieniu maszyny rozpocznie program chat.py. Jeśli umrze z jakiegokolwiek powodu, uruchomi go ponownie. Nie musisz się martwić podwójnym rozwidleniem lub demonicznym kodowaniem. To jest dla ciebie obsługiwane przez nowicjusz.

Jeśli chcesz zatrzymać lub uruchomić proces można zrobić z

service chat start 
service chat stop 

Nazwą chat jest automatycznie znaleźć z nazwą pliku .conf wewnątrz /etc/init

mam obejmującym tylko Podstawy upstart tutaj. Istnieje wiele innych funkcji, które sprawiają, że jest jeszcze bardziej przydatny. Wszystkie dostępne przez uruchomienie man upstart.

Ta metoda jest znacznie wygodniejsza niż pisanie własnego kodu demonizacji. Plik konfiguracyjny 4-8 linii dla wbudowanego komponentu Ubuntu jest znacznie mniej podatny na błędy niż bezpieczne tworzenie podwójnego widelca, a następnie monitorowanie go innym procesem, aby upewnić się, że nie zniknie.

Monit jest trochę czerwonego śledzia. Jeśli chcesz otrzymywać powiadomienia o przestojach, musisz mimo to uruchomić program monitorujący na serwerze osobnym. Polegaj na nowościach, aby proces zawsze działał na serwerze. Następnie masz inną usługę, która upewnia się, że serwer działa. Czas przestoju ma wiele przyczyn. Proces uruchomiony na tym samym serwerze nie powie dokładnie, czy serwer sam się zawiesza. Potrzebujesz osobnego komputera (lub dostawcy zewnętrznego, takiego jak pingdom), aby powiadomić Cię o tym stanie.

+0

Czy jest jakieś autentyczne źródło, które obsługuje twoją odpowiedź? Uruchamianie na Ubuntu jest opcją, ale nie jest obowiązkowe (daemonize działa na obu). Po drugie, aby uzyskać powiadomienia o przestojach, musisz użyć opcji monitowania nawet w trybie upstart. – mtariq

+0

Możesz wstać i wysłać e-mailem, gdy się zatrzyma/uruchomi (http://serverfault.com/questions/236925/how-can-i-receive-an-email-when-an-upstart-monitored-script-respawns) . autentyczne źródło? Ludzie używają wszędzie produkcji od produkcji. Używamy upstart w produkcji Nie można używać monitów do alertów o przestoju. To bezcelowe. Zobacz edytowaną odpowiedź z tego powodu. – aychedee

+0

Świetny post. Upstart jest w drzewie Debiana, więc prawdopodobnie można go używać w debianach wanilii lub mennicy, a także innych pochodnych. – meawoppl

3

użyłem starym stylu initscript ze start-stop-daemon utility.Look na skel w /etc/init.d

5

Można sprawdzić supervisor. Możliwe jest uruchomienie procesu przy uruchomieniu systemu, a następnie utrzymanie go przy życiu aż do wyłączenia.

Najprostszy plik konfiguracyjny będzie:

[program:my_script] 
command = /home/foo/bar/venv/bin/python /home/foo/bar/scripts/my_script.py 
environment = MY_ENV_VAR=FOO, MY_OTHER_ENV_VAR=BAR 
autostart = True 
autorestart = True 

Następnie można połączyć go /etc/supervisord/conf.d, uruchom sudo supervisorctl wejść konsolę zarządzania przełożonego, typ w reread tak że nadzorca Zawiadomienia nowy wpis config i update aby wyświetlić nowy programy na liście status.

Aby uruchomić/ponownie uruchomić/zatrzymać program, można wykonać sudo supervisorctl start/restart/stop my_script.

+0

Ogólna informacja dla czytelników, że opiekun nie działa z Pythonem 3. – shongololo