Execute o script Bash em segundo plano e saia do terminal


Respostas:


45

Para evitar que os sinais de saída se propaguem aos processos filhos do terminal e shell, execute o comando com nohup, ou seja:

nohup cmd &

1
Essa é a resposta correta. Sem nohup, o processo iniciado ainda é considerado um "filho" do processo do terminal e, portanto, finalizado se o terminal estiver fechado.
Izzy

3
cmd & disowntambém funciona, já que o &é tratado como um ;separador de comandos. O comando disown remove a conexão entre a sessão do shell bash e o comando em segundo plano.
Lornix 14/07/2012

2
zsh tem um atalho para isso: cmd &|.
Thor

Para que isso funcionasse, tive que alterar uma preferência no Terminal.app. Em Perfis, selecione o perfil ativo, então Shell> Quando as saídas shell> Fechar se o shell saiu limpa
Antoine

6

Usando screen:

screen -S <session name> -d -m <your command>

Depois disso, você pode sair do terminal, também pode anexá-lo novamente:

screen -r <session name>

Mais informações: referência


4

Se você deseja executar um comando ou arquivo específico a cada segundo ou mais em segundo plano depois de sair do terminal, pode tentar esta pequena coisa fácil;

nohup watch -n5 'bash script.sh' &

Isso executaria o scipt.sh a cada 5 segundos.


1
"nohup" já está coberto pela resposta aceita. E tenho certeza de que o autor da pergunta mencionou o cron porque o estava usando para dizer "Execute este comando alguns segundos no futuro", para não executá-lo periodicamente.
David Richerby

1
Minha resposta não piora as coisas. Veja o ponto do voto negativo. Neural seria suficiente.
jamietelin

3

Coloque um caractere "&" após o seu comando.

por exemplo:

/home/your/script.sh &

7
neste caso, quando o terminal está fechado, o processo é iniciado por /home/your/script.sh- como não foi destacado de seu "pai", mas apenas "em segundo plano". Use nohuppara desconectá-lo de verdade.
Izzy

My bad, eu não sabia sobre isso, mas quando eu testei no meu Debian, o comando mantido execução depois de fechar o shell que lançou-lo: /
Flinth

1
Não tenho certeza de onde exatamente o processo em segundo plano está anexado e quando. Mas se você, por exemplo, fizer login em uma máquina remota, ele definitivamente será interrompido assim que você sair (exceto se for daemonizado ). Para ter 100% de certeza, você prefere usar nohup- o que também registra toda a saída (agora invisível) em um arquivo chamado nohup.outlocalizado no diretório em que você iniciou o comando.
Izzy

Ok, bem, obrigado pelas suas explicações ^^
Flinth

Esta resposta pode funcionar bem quando combinada com o jobscomando. Muitas vezes, eu quero poder voltar ao processo de shell após o plano de fundo.
precisa saber é o seguinte
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.