2012-05-29 10 views
5

Jak wysłać polecenie ponownego ładowania do demona, którego autorem jest upstart, bez konieczności całkowitego zatrzymania go?Wyślij polecenie ponownego ładowania, aby uruchomić usługę

+0

Usługi rozpoczęte za pośrednictwem 'upstart' są albo jedno- programy czasowe uruchamiane w celu obsługi zdarzeń lub są długo działającymi demonami. Zazwyczaj stdin/stdout/stderr dla tego rodzaju programów nie istnieje - piszą do plików dziennika, gdy muszą zgłosić problemy i odczytują dane wejściowe z określonych plików. Ciekawi mnie, dlaczego próbujesz obejść ten normalny paradygmat - jaki problem próbujesz rozwiązać? – sarnold

+0

Uruchomę skrypt node.js jako demona za pomocą usługi upstart, która musi być trwale uruchomiona. Ten skrypt czasami wymaga polecenia ponownego załadowania. Niestety upsatrt nie obsługuje składni takich jak 'reload servercontrol'. Więc pomyślałem o używaniu stdin, ponieważ nie mogę zatrzymać skryptu dla 'stop servercontrol & start servercontrol'. – buschtoens

+0

'reload service' wyśle ​​sygnał' SIGHUP' do twojego procesu; sygnał 'SIGHUP' jest często używany przez demony do żądania ponownego odczytania ich plików konfiguracyjnych ... czy to zadziała? Administratorzy mogliby łatwo zarządzać Twoim zadaniem podobnie do wszystkich innych zadań w ten sposób. – sarnold

Odpowiedz

9

upstart zazwyczaj zarządza dwa rodzaje procesów:

  • programów uruchamianych raz obsłużyć zdarzenie
  • demonów, które są długowieczne i świadczyć usługi na coś innego

Daemons typowo dostarczyć obsługę sygnału dla sygnału SIGHUP, poprosić demona o ponowne odczytanie i ponowne przeanalizowanie ich plików konfiguracyjnych. (SIGHUP jest sygnałem zawieszającym, bardziej odpowiednim dla terminali, które mogą przychodzić i odchodzić, ponieważ linie telefoniczne lub protokoły SSH są podłączone lub odłączone.) W programach, które nie mają terminali, nie ma sensu "rozłączać się" z terminalem , więc sygnał nie zostanie wysłany do demona z wyjątkiem działań administratora systemu).

Jeśli można zmodyfikować swój program do ponownego odczytania jego konfigurację, gdy odbiera sygnał SIGHUP, a następnie można użyć standardowego polecenia upstartreload service ponownie załadować pliki konfiguracyjne. (Możesz wykonać dowolną wartość na tym sygnale, ale administratorzy systemu oczekują, że demony będą ponownie czytać pliki konfiguracyjne na tym sygnale - wykonanie czegoś innego może być mylące i denerwujące.)

+4

Można również skonfigurować skrypt startowy, aby emitował inny sygnał dla polecenia 'reload'. W samym skrypcie po prostu zadeklaruj 'reload signal USR2' lub cokolwiek innego, co twoja aplikacja. –