Em seguida, vamos ver se para sempre pode atingir a meta.
1. Introdução para sempre
O Forever é um simples daemon imperativo do NodeJS que pode iniciar, interromper e reiniciar aplicativos de aplicativos. O Forever é completamente baseado em operações de linha de comando. Sob o processo Forever, um processo infantil do nó é criado e o processo infantil do nó é monitorado através do monitor. Depois que o arquivo for atualizado ou o processo for vencido, para sempre reiniciar automaticamente o servidor Node para garantir que o aplicativo esteja em execução normalmente.
2. Instalação para sempre
Instalação global para sempre
A cópia do código é a seguinte:
~ D:/workspace/javascript> npm install -g para sempre
D:/Toolkit/Nodejs/Forever -> D:/Toolkit/Nodejs/Node_modules/Forever/Bin/Forever
D:/Toolkit/Nodejs/Foreverd -> D:/Toolkit/Nodejs/Node_modules/Forever/Bin/Foreverd
Confira a ajuda para sempre
A cópia do código é a seguinte:
~ D:/workspace/javascript> para sempre -h
Ajuda: Uso: Forever [Ação] [Opções] Script [Script-Otions]
ajuda:
Ajuda: monitora o script especificado no processo atual ou como um daemon
ajuda:
Ajuda: Ações:
Ajuda: Inicie o script como um daemon
Ajuda: Pare de parar o script Daemon
Ajuda: Stopall Stop todos os scripts para sempre
Ajuda: reiniciar reiniciar o script Daemon
AJUDA: RESTARTALL reiniciar todos os scripts para sempre
Ajuda: Lista de listas de todos os scripts para sempre
Ajuda: Config lista toda a configuração do usuário para sempre
Ajuda: Set <Key> <Val> Define a configuração especificada para sempre <Key>
Ajuda: Clear <Key> limpa a configuração especificada para sempre <Key>
Ajuda: Logs lista os arquivos de log para todos os processos para sempre
Ajuda: Logs <Script | Index> Tanta os logs para <script | index>
Ajuda: Colunas Add <Col> Adiciona a coluna especificada à saída em `Lista Forever '
Ajuda: Colunas RM <Col> Removeu a coluna especificada da saída em `Forever List '
Ajuda: Colunas Set <Cols> Defina todas as colunas para a saída em `Forever List`
Ajuda: Cleanlogs [cuidadoso] exclui todos os arquivos históricos de log para sempre
ajuda:
Ajuda: Opções:
Ajuda: -m Max execute apenas o script especificado Times
Ajuda: -l LogFile registra a saída para sempre para o arquivo de log
Ajuda: -O Logs de saída de saída do script infantil para o arquivo de saída
Ajuda: -e Errfile Logs Stderr do script infantil para Errfile
Ajuda: -P caminho do caminho do caminho para todos os arquivos relacionados para sempre (arquivos PID, etc.)
Ajuda: -c comando comando para executar (padrão para o nó)
Ajuda: -a, -Append Append Logs
Ajuda: -f, - -FIFO Logs para stdout
ajuda: -n, -número de linhas de log para imprimir
Ajuda: -Pidfile o arquivo PID
Ajuda: -Sourcedir o diretório de origem para o qual o script é relativo a
Ajuda: -Tempo de atividade mínimo mininuptime (Millis) para que um script não seja considerado "girando"
Ajuda: -Spinsleeptime Horário para esperar (Millis) Entre os lançamentos de um script giratório.
AJUDA:--CORES-NO-CORLORS Desativará a coloração da saída
Ajuda:-Planta alias de--não-coloridas
Ajuda: -D, -Debug Força para sempre para registrar a saída de depuração
Ajuda: -v, --verbose liga as mensagens detalhadas de Forever
AJUDA: -S, -Silent Run the Child Script silenciando stdout e stderr
Ajuda: -w, -assistir assistir para alterações de arquivo
Ajuda:-Diretório de nível superior do WatchDirectory para assistir a partir de
Ajuda: - -Watchignore para ignorar o padrão quando o relógio é ativado (a opção múltipla é permitida)
Ajuda: -h, -Help você está olhando para ele
ajuda:
Ajuda: [Processo de longa execução]
Ajuda: O processo Forever continuará executando mensagens de log de saída para o console.
Ajuda: Ex. para sempre -O out.log -e err.log my -script.js
ajuda:
Ajuda: [Daemon]
Ajuda: o processo Forever será executado como um daemon que fará o processo de destino iniciar
Ajuda: em segundo plano. Isso é extremamente útil para scripts simples de partida remota. JS scripts
Ajuda: sem usar nohup. Recomenda -se que seja iniciado com -o -l, & -e.
Ajuda: Ex. Forever Start -l Forever.log -o out.log -e err.log my -daemon.js
Ajuda: para sempre pare my-daemon.js
ajuda:
Vemos que sempre suporta muitos itens de comando e configuração, que devem ser uma ferramenta de gerenciamento de linha de comando.
3. Explicação chinesa da linha de comando Forever
Ações de Subcomando:
A cópia do código é a seguinte:
Iniciar: Inicie o processo Daemon
Pare: pare o daemon
Stopall: Pare todos os processos para sempre
Reinicie: reinicie o daemon
RESTARTALL: reinicie todos os processos de forever
Lista: Lista exibe o processo para sempre
Config: Liste todos os itens de configuração do usuário
Definir <Key> <Val>: Defina itens de configuração do usuário
Clear <Key>: Limpar itens de configuração do usuário
Logs: lista os logs para todos os processos para sempre
logs <script | index>: mostre o log mais recente
Colunas Add <Col>: Métricas personalizadas para a lista para sempre
colunas rm <col>: remova a métrica da lista para sempre
Conjunto de colunas <CLS>: defina todas as métricas para a lista para sempre
Cleanlogs: Exclua todos os registros da história para sempre
Opções de parâmetros de configuração:
A cópia do código é a seguinte:
-m max: número de vezes o script especificado é executado
-l LogFile: Log de saída no arquivo de log
-O Outfile: Informações do console de saída para vencer o arquivo
-e Errfile: Erro de console de saída em Errfile
-p caminho: diretório raiz
-C Comando: execute o comando, o padrão é o nó
-a, anexar: mesclar logs
-f, FIFO: saída de log de streaming
-n, número: número de linhas de impressão de log
PIDFILE: arquivo PID
Soucedir: diretório de código -fonte
Minupime: Tempo mínimo de atualização de spinn (MS)
Spinsleeptime: o intervalo entre duas rodadas
Cores: Coloração de saída do console
Plano: alias sem cores, saída de console incolor
-d, depuração: modo de depuração
-v, verbose: impressão de saída detalhada
-s, silencioso: não imprima toras e mensagens de erro
-w, assista: Monitore as alterações do arquivo
WatchDirectory: Monitore o diretório superior
Watchignore: ignore o monitoramento por meio de correspondência de padrões
-h, ajuda: informações de ajuda da linha de comando
4. Forever Server Management
Crie um projeto da Web (Express3+EJS) e use para sempre para gerenciar o servidor.
Instale o Express3
A cópia do código é a seguinte:
~ D:/workspace/javascript> expresso -e nodejs -forever
~ D:/workspace/javascript> cd nodejs-forever && npm install
Inicie o aplicativo por sempre
A cópia do código é a seguinte:
~ D:/workspace/javascript/nodejs-forever> para sempre iniciar app.js
Aviso: -Minuptime não está definido. Em realização de: 1000ms
Warn: -Spinsleeptime não está definido. Seu script sairá se não ficar acordado por pelo menos 1000ms
Informações: Arquivo de processamento para sempre: App.js
Abra o navegador: http: // localhost: 3000, você pode ver a interface da web
Verifique o status Forever Under Win
A cópia do código é a seguinte:
~ D:/workspace/javascript/nodejs-forever> lista para sempre
Info: Não há processos para sempre em execução
~ D:/workspace/javascript/nodejs-forever> para sempre pare app.js
Erro: para sempre não pode encontrar processo com índice: App.js
Descobrimos que o programa Forever estava funcionando errado! ! O programa está claramente em seu estado de corrida, mas não pode ser visto através da lista. Em seguida, mude para o Linux Ubuntu e continue testando.
5. Para sempre gerencia servidores no Ubuntu
Ambiente do sistema Linux
Linux: Ubuntu 12.04.2 servidor de 64 bits
Nó: v0.11.2
NPM: 1.2.21
Projeto de inicialização: o comando de instalação não é explicado
A cópia do código é a seguinte:
~ CD/Home/Conan/Nodejs
~ expresso -e nodejs -paraver
~ CD Nodejs-Forforever && NPM Instale
~ sudo npm install para sempre -g
Comece para sempre
Copie o código da seguinte forma: ~ Forever Start App.js
Aviso: -Minuptime não está definido. Em realização de: 1000ms
Warn: -Spinsleeptime não está definido. Seu script sairá se não ficar acordado por pelo menos 1000ms
Informações: Arquivo de processamento para sempre: App.js
Verifique o status do servidor do nó
Copie o código da seguinte forma: ~ Lista Forever
Info: Processos para sempre em execução
Dados: script de comando uid para sempre o tempo de atualização do arquivo de log PID
Dados: [0] l2ty/usr/local/bin/node app.js 18276 18279 /home/conan/.forever/l2ty.log 0: 0: 0: 37.792
# Processo do sistema
~ ps -aux | nó grep
AVISO: Sintaxe PS ruim, talvez uma falsa '-'? Consulte http://procps.sf.net/faq.html
Conan 18296 0,5 1,1 597696 23776? Ssl 15:48 0:00/usr/local/bin/node/usr/local/lib/node_modules/forever/bin/monitor app.js
Conan 18299 0,4 0,8 630340 18392? SL 15:48 0:00/usr/local/bin/node /home/conan/nodejs/nodejs-forever/app.js
# Ocupação portuária
~ netstat -nltp | nó grep
TCP 0 0 0.0.0.0:3000 0.0.0.0:* Ouça 18299/Nó
Pare o servidor
Copie o código da seguinte
Informações: Processo para sempre parado:
Dados: script de comando uid para sempre o tempo de atualização do arquivo de log PID
[0] l2ty/usr/local/bin/node app.js 18276 18279 /home/conan/.forever/l2ty.log 0: 0: 0: 45.621
Vemos que é normal no ambiente Linux Ubuntu.
6. simular o tempo de inatividade do servidor
Duas soluções de teste:
1. Use comandos Linux para matar diretamente o processo do nó
2. Na aplicação, simule a saída de exceção
1). Use comandos Linux para matar diretamente o processo do nó
A cópia do código é a seguinte:
# Verifique o processo do nó, PID = 18299
~ ps -aux | nó grep
Conan 18296 0,0 1,1 597696 23776? Ssl 15:48 0:00/usr/local/bin/node/usr/local/lib/node_modules/forever/bin/monitor app.js
Conan 18299 0,0 0,8 630340 18392? SL 15:48 0:00/usr/local/bin/node /home/conan/nodejs/nodejs-forever/app.js
Conan 18315 0,0 0,0 13584 956 pts/5 r+ 15:52 0:00 grep -cor = nó automático
# Kill pid = 19299
~ Kill -9 18299
# Veja o processo do nó novamente, o nó será reiniciado automaticamente, o novo PID = 18324
~ ps -aux | nó grep
Conan 18296 0,0 1,1 597696 23916? Ssl 15:48 0:00/usr/local/bin/node/usr/local/lib/node_modules/forever/bin/monitor app.js
Conan 18316 2,6 0,8 630340 18412? SL 15:52 0:00/usr/local/bin/node /home/conan/nodejs/nodejs-forever/app.js
Conan 18324 0,0 0,0 13584 956 pts/5 r+ 15:52 0:00 grep -cor = nó automático
Vemos que matar o processo do nó, para sempre nos ajudará a reiniciar o nó.
Kill Forever Monitor
A cópia do código é a seguinte:
~ Kill -9 18296
~ ps -aux | nó grep
Conan 18316 0,0 0,9 630340 18644? SL 15:52 0:00/usr/local/bin/node /home/conan/nodejs/nodejs-forever/app.js
Conan 18333 0,0 0,0 13584 952 pts/5 s+ 15:57 0:00 grep -cor = nó automático
# Mate o processo do nó novamente
~ Kill -9 18316
~ ps -aux | nó grep
Conan 18336 0,0 0,0 13584 956 pts/5 s+ 15:58 0:00 grep -cor = nó automático
Tentamos matar o monitor do Forever. O programa Monitor não reiniciou automaticamente. Depois de matar o processo do nó, o nó não será reiniciado automaticamente.
2). No aplicativo, simule a saída de exceção
Modifique o arquivo: App.js
A cópia do código é a seguinte:
~ vi app.js
// ..
http.createServer (app) .listen (app.get ('porta'), function () {
console.log (new Date ());
console.log ('servidor expresso de escuta na porta' + app.get ('porta'));
});
setTimeout (function () {
console.log (new Date ());
lançar um novo erro ('o aplicativo é o erro do interior!');
}, 10*1000);
Comece com o comando Node
Copie o código da seguinte forma: ~ Node App.js
Qui 26 de setembro de 2013 16:08:44 GMT+0800 (CST)
Servidor expresso ouvindo na porta 3000
Qui 26 de setembro de 2013 16:08:54 GMT+0800 (CST)
/home/conan/nodejs/nodejs-forever/app.js:41
lançar um novo erro ('o aplicativo é o erro do interior!');
^
Erro: o aplicativo é o erro do interno!
em null._ontimeout (/home/conan/nodejs/nodejs-forever/app.js:41:9)
no timer.ListOntimeout [AS ONTimeout] (Timers.js: 110: 15)
Após 10 segundos, o processo do nó está pendurado devido a um erro interno.
Comece com o comando Forever
A cópia do código é a seguinte:
~ logs mkdir
~ chmod 777 -R logs
~ para sempre -P. -l ./logs/access.log-e ./logs/error.log start app.js
# Verifique o log de erros
~ logs de gatos/access.log ls
Qui 26 de setembro de 2013 16:15:02 GMT+0800 (CST)
Servidor expresso ouvindo na porta 3000
Qui 26 de setembro de 2013 16:15:12 GMT+0800 (CST)
/home/conan/nodejs/nodejs-forever/app.js:41
lançar um novo erro ('o aplicativo é o erro do interior!');
^
Erro: o aplicativo é o erro do interno!
em null._ontimeout (/home/conan/nodejs/nodejs-forever/app.js:41:9)
no timer.ListOntimeout [AS ONTimeout] (Timers.js: 110: 15)
Erro: Script detectado para sempre saiu do Código: 8
Erro: reiniciando para sempre o script para 1 tempo
Qui 26 de setembro de 2013 16:15:13 GMT+0800 (CST)
Servidor expresso ouvindo na porta 3000
Qui 26 de setembro de 2013 16:15:23 GMT+0800 (CST)
/home/conan/nodejs/nodejs-forever/app.js:41
lançar um novo erro ('o aplicativo é o erro do interior!');
^
Erro: o aplicativo é o erro do interno!
em null._ontimeout (/home/conan/nodejs/nodejs-forever/app.js:41:9)
no timer.ListOntimeout [AS ONTimeout] (Timers.js: 110: 15)
Erro: Script detectado para sempre saiu do Código: 8
Erro: reiniciando para sempre o script para 2 tempo
Qui 26 de setembro de 2013 16:15:23 GMT+0800 (CST)
Servidor expresso ouvindo na porta 3000
Qui 26 de setembro de 2013 16:15:33 GMT+0800 (CST)
/home/conan/nodejs/nodejs-forever/app.js:41
lançar um novo erro ('o aplicativo é o erro do interior!');
^
Erro: o aplicativo é o erro do interno!
em null._ontimeout (/home/conan/nodejs/nodejs-forever/app.js:41:9)
no timer.ListOntimeout [AS ONTimeout] (Timers.js: 110: 15)
Erro: Script detectado para sempre saiu do Código: 8
Erro: reiniciando para sempre o script para 3 tempo
Qui 26 de setembro de 2013 16:15:33 GMT+0800 (CST)
Servidor expresso ouvindo na porta 3000
Qui 26 de setembro de 2013 16:15:43 GMT+0800 (CST)
/home/conan/nodejs/nodejs-forever/app.js:41
lançar um novo erro ('o aplicativo é o erro do interior!');
^
Erro: o aplicativo é o erro do interno!
em null._ontimeout (/home/conan/nodejs/nodejs-forever/app.js:41:9)
no timer.ListOntimeout [AS ONTimeout] (Timers.js: 110: 15)
Erro: Script detectado para sempre saiu do Código: 8
Erro: reiniciando para sempre o script por 4 vezes
Descobrimos que a cada 10 segundos, o nó desliga e depois é reiniciado para sempre! !
Através da lista, também podemos ver que o PID mudou várias vezes.
A cópia do código é a seguinte:
~ lista para sempre
Info: Processos para sempre em execução
Dados: script de comando uid para sempre o tempo de atualização do arquivo de log PID
Dados: [0] smtt/usr/local/bin/node app.js 18444 18579 logs/access.log 0: 0: 0: 7.211
~ lista para sempre
Info: Processos para sempre em execução
Dados: script de comando uid para sempre o tempo de atualização do arquivo de log PID
Dados: [0] smtt/usr/local/bin/node app.js 18444 18579 logs/access.log 0: 0: 0: 8.921
~ lista para sempre
Info: Processos para sempre em execução
Dados: script de comando uid para sempre o tempo de atualização do arquivo de log PID
Dados: [0] smtt/usr/local/bin/node app.js 18444 18604 logs/access.log 0: 0: 0: 0.177
~ lista para sempre
Info: Processos para sempre em execução
Dados: script de comando uid para sempre o tempo de atualização do arquivo de log PID
Dados: [0] smtt/usr/local/bin/node app.js 18444 18604 logs/access.log 0: 0: 0: 2.206
Dessa forma, o Forever nos ajuda a concluir várias funções importantes de gerenciamento de servidores: "Comando de início/parada simples", "Suporte a implantação a quente", "Download de reinicialização" e "Interface de monitoramento e logs".
Comparados com o gerenciamento do Upstart, as etapas para configurar scripts (/etc/init/nodejs-xx.conf) são omitidas. Outras funções precisam ser usadas um passo mais perto de saber.
7. Configuração de inicialização do ambiente de desenvolvimento e ambiente de produção
Ambiente de Desenvolvimento
A cópia do código é a seguinte:
~ CD/Home/Conan/Nodejs/Nodejs-Forever/
~ para sempre -P. -l ./logs/access.log-e ./logs/error.log -a -w Start App.js
Ambiente de produção
Copie o código da seguinte forma: ~ exportar log =/var/log/nodejs/projeto
~ exportar PID =/var/log/nodejs/Project/Forever.pid
~ exportar app_path =/home/conan/nodejs/nodejs-forever
~ export app = $ app_path/app.js
~ Forever -P $ app_path -l $ log/access.log -e $ log/error.log -o $ log/out.log --a - -pidfile $ pid Iniciar $ app $