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ę
Odpowiedz
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 upstart
reload 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.)
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. –
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
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
'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