Executando Processos Após Logout
Às vezes, você precisa que um processo continue em execução mesmo após sair do terminal. O comando nohup permite que você execute um comando que continuará em execução mesmo após sair do shell.
Vamos criar um script que rodará por muito tempo:
cd ~/project
nano persistent-task.sh
Adicione o seguinte conteúdo:
#!/bin/bash
## This script runs for a very long time
echo "Starting persistent task at $(date)" > persistent-output.log
for i in {1..100}; do
echo "Iteration $i at $(date)" >> persistent-output.log
sleep 10
done
echo "Persistent task completed at $(date)" >> persistent-output.log
Salve e saia do nano, em seguida, torne o script executável:
chmod +x persistent-task.sh
Agora, execute-o com nohup e coloque-o em segundo plano:
nohup ./persistent-task.sh &
Você verá uma saída semelhante a:
[1] 5678
nohup: ignoring input and appending output to 'nohup.out'
Isso significa que o processo está em execução em segundo plano e continuará mesmo que você saia. A saída que normalmente iria para o terminal é redirecionada para um arquivo chamado nohup.out.
Dica para Gerenciar a Saída: Se você não quiser que a saída do processo em segundo plano apareça em seu terminal e potencialmente interfira em seu trabalho, você pode redirecionar a saída para um arquivo:
## Redireciona a saída para um arquivo específico
./long-task.sh > task-output.log 2>&1 &
## Ou redireciona para /dev/null para descartar a saída completamente
./long-task.sh > /dev/null 2>&1 &
O 2>&1 redireciona tanto a saída padrão quanto a saída de erro. Dessa forma, o processo em segundo plano é executado silenciosamente sem poluir seu terminal.
Você pode verificar se o processo está em execução:
ps aux | grep persistent-task.sh
E você pode examinar o arquivo de saída:
cat persistent-output.log
A saída mostra o horário de início e as iterações da tarefa persistente.
O Comando disown
Outra maneira de manter os processos em execução após o logout é usar o comando disown. Primeiro, execute um processo em segundo plano:
cd ~/project
./persistent-task.sh &
Em seguida, use disown para desvinculá-lo do terminal:
disown %1
Agora este processo continuará em execução mesmo que você feche o terminal.
Esses comandos são essenciais ao executar tarefas em servidores remotos onde você precisa que os processos continuem após a desconexão.