2011-06-29 5 views
19

Mam kilka, być może banalnych, pytań z wykorzystaniem na zawsze z Node.js. Z tego, co przeczytałem, na zawsze można korzystać programowo i utrzymuje listę ze wszystkimi skryptami, które używają na zawsze. Kiedy proces ten umiera, automatycznie tworzy nowy, dopóki nie zostanie zatrzymany.Używanie na zawsze z Node.js

Jednak moje pytanie brzmi: jak to zrobić na zawsze? Czy dodaje również te skrypty podczas uruchamiania?

+3

Dziękuję @ Dan Davies Brackett – cowboybebop

Odpowiedz

29

Można używać zawsze programowo tak:

Korzystanie wystąpienie Zawsze wewnątrz node.js skryptu:

var forever = require('forever-monitor'); 

    var child = new (forever.Monitor)('your-filename.js', { 
    max: 3, 
    silent: true, 
    options: [] 
    }); 

    child.on('exit', function() { 
    console.log('your-filename.js has exited after 3 restarts'); 
    }); 

    child.start(); 

należy wziąć chwilę i przeczytać opcje dostępne w doskonałej dokumentacji na zawsze w the README.md

masz kilka zdarzeń, które można słuchać w Zawsze jak:

  • błąd [err]: Wywoływany, gdy wystąpi błąd
  • start [proces, fvrFile, data]: Podnieś, kiedy skrypt docelowy jest uruchamiany po raz pierwszy.
  • stop [proces]: Wywoływany, gdy skrypt docelowy jest zatrzymywany przez użytkownika
  • zapisz [ścieżka, dane]: Wywoływany, gdy monitor docelowy zapisuje informacje pid na dysku.
  • restart [forever]: Wywoływany za każdym razem, gdy skrypt docelowy jest ponownie uruchamiany
  • exit [forever]: Wywoływany, gdy docelowy skrypt faktycznie opuszcza (trwały).
  • standardowe wyjście [dane]: Podniesiony, gdy dane są odebrane z procesu dzieci standardowe wyjście
  • stderr [dane]: Podniesiony, gdy dane są odebrane z procesu dzieci stderr

to poprzez dołączenie zdarzenie słuchaczy skryptu, który próbujesz uruchomić i obsługiwać je w zgrabny sposób.

The code jest dość dobrze udokumentowana, jeśli chcesz dokładnie sprawdzić, jak to działa.

Powinieneś również przeczytać ten excellent tutorial, w jaki sposób utrzymać proces na zawsze.

Co do drugiego pytania: Nie, nie dodaje go do rozruchu przy starcie. W tym celu należy dodać go jako upstart job lub użyć czegoś w rodzaju Monit, aby go monitorować i uruchamiać. W tym celu powinieneś rzucić okiem na Deploying Node.js with Upstart and Monit. To świetny samouczek.

+1

Druga połowa twojej odpowiedzi jest dokładnie tym, czego szukałem. Nie byłem pewien, czy to właśnie musiałem zrobić, więc dziękuję za pomoc. – cowboybebop

+0

Cieszę się, że mogę pomóc. Zdecydowanie przeczytaj ten samouczek dotyczący wdrażania węzła. Użyłem tej metody z kilkoma poprawkami bardzo skutecznie w kilku poprzednich projektach. – slickplaid

+0

Już natknąłem się na wieczną stronę na Github, poradnik i samouczek, naprawdę to przeczytam. Dzięki – cowboybebop

5

To jest stary post, ale natknąłem się na to w Google - jego trochę nieaktualne, ponieważ na zawsze rozgałęziono wersję wiersza poleceń z wersji programowej. Musisz użyć forever-monitor zamiast forever. Przykładowy kod powinien być teraz;

var forever = require('forever-monitor'); 

    var child = new (forever.Monitor)('your-filename.js', { 
    max: 3, 
    silent: true, 
    options: [] 
    }); 

    child.on('exit', function() { 
    console.log('your-filename.js has exited after 3 restarts'); 
    }); 

    child.start(); 

Próbowałem zasugerować edycję oryginalnej odpowiedzi, ale uprawnienia, które mają zostać odrzucone.Pomyślałem, że mógłbym zaoszczędzić innym, kiedy zajęło mi zrozumienie, dlaczego przykładowy kod nie działa :-)

+0

Czy możesz wyjaśnić, co robi kod? ponieważ chcę ponownie uruchomić mój skrypt/serwer node.js programowo za każdym razem, gdy serwer zawiesza się lub witryna przestaje działać. Jak mogę obsłużyć to programowo, aby automatycznie uruchomić ponownie mój skrypt, jeśli umrze? – Faizan

+0

@Faizan Polecam używanie na zawsze z wiersza poleceń zamiast w kodzie. Jeśli serwer uruchomi się ponownie, możesz dodać wpis '@reboot' do tablicy crontab, aby ponownie go uruchomić. Poza tym warto też zobaczyć PM2. –