Como posso manter algo em execução, mas executar outros comandos do terminal? [duplicado]

0

Tenho certeza de que essa é uma pergunta muito estúpida e provavelmente já foi feita uma dúzia de vezes nesse site, e eu não sei quais palavras-chave pesquisar. Eu ainda sou muito novo no gerenciamento de um servidor e novo na linha de comando em geral, mas é algo que eu tenho tentado por muito tempo.

Agora eu tenho o Ubuntu Server (sem GUI) rodando um servidor web Node.js.

Como posso manter o Node em execução durante a execução de outros comandos na linha de comando?

Por exemplo:

node /var/www/my_app.js

Esse comando me impede de executar outros comandos até eu terminá-lo com Ctrl + C . Mas e se eu quiser executar um comando redis-cli deixando o Node rodando em segundo plano? Em outras palavras:

  1. Como posso sair do contexto do Node.js sem parar o servidor do Nó? e
  2. Depois de fazer (1), como posso voltar ao contexto do Nó?

Não sei se (2) faz sentido para o comando node , mas, por exemplo, se eu executei nodemon , posso executar um comando rs (restart) enquanto nodemon é correndo.

Obrigado e peço desculpas se esta for uma pergunta duplicada e / ou realmente óbvia.

    
por M Miller 10.05.2014 / 17:59

1 resposta

3

O sugerido (setsid, et al) é ótimo se você está apenas disparando algo e não se preocupa com sua longevidade, mas na produção você usaria um sistema daemon apropriado para monitorar e reaparecer um processo do servidor. O Ubuntu vem com o Upstart, então eu gostaria de escrever um script Upstart.

Salve algo assim em algum lugar como /etc/init/mynodeapp.conf :

description "My node.js app"

start on startup
stop on shutdown
respawn

exec sudo -u USER /usr/bin/node /var/www/my_app.js

Substitua USER na linha exec pelo usuário que você deseja executar e verifique se o caminho para o binário node está cheio e correto ( which node ajudará a confirmar). Se você estiver usando uma versão instalada localmente, verifique se ela aponta para lá.

Assim que estiver em ordem, sudo start mynodeapp irá iniciá-lo, sudo stop mynodeapp irá pará-lo e vários outros comandos iniciais ( restart , status , etc) farão o que forem projetados para fazer. Se você não quiser que ele inicie na inicialização, apenas comente a linha de início com um # .

É assim que eu faria na produção ... Você menciona querer "retornar ao contexto do Node" ... Isso é um pouco mais difícil. Upstart e até mesmo o outro processo de técnicas de reparação todos os separar do processo. Geralmente não há como voltar ao fogo de artifício aceso.

Se você tem um processo contínuo que você precisa seguir, provavelmente é a sua sessão de terminal que você quer ver mudando. Se eu realmente precisasse do que você está sugerindo, eu começaria a olhar para screen . Isso permite que você tenha vários terminais suspensos que você pode remover e reconectar de e para, respectivamente.

Não é um aplicativo simples para dominar, mas um que pode valer a pena ser explorado:

por Oli 10.05.2014 / 18:33