Suponha que você tenha um iniciador em seu painel que inicia um script chamado foo.sh no modo terminal.
foo.sh que inicia outro script chamado bar.sh em segundo plano.
me deparo com problemas:
Primeiro: o nome do arquivo escrito de bar.sh é diferente.
Segundo e principal: o script bar.sh não é independente e morre quando o terminal é fechado.
Eu testei isso em um antigo 16.04. máquina.
foo.sh
#!/bin/bash
#read an user input
read -r -t 60 -p ":" foo
echo "$foo"
#call bar script
/home/$USER/bar.sh "10" "$foo" & disown
#show if bar.sh was started
echo $?
#sleep a short time to see the echo's
sleep 3
bar.sh
#!/bin/bash
#sleep some time
[[ -n "$1" ]] && sleep $1
#then write user input to file called output
echo "$2 - sleept $1 seconds" >> /home/$USER/output
Se o tempo para dormir em foo for maior que em bar, o arquivo de saída é gravado, mas chamado de saída? (com um ? no final).
Mas se o tempo for maior em bar, então bar será morto quando foo terminar e o terminal for fechado.
Alguma idéia de como configurar corretamente uma instância em segundo plano do bar.sh?
Outro terminal que permanece aberto não é uma solução para mim.
THX!
PS Como um comentário sugerido, devo fazer minha pergunta aqui.
Como você disse que funcionou, estou dando isso como resposta, com informações adicionais.
"nohup" significa "Sem Hungup". Como o nome sugere, ele continuará executando o comando sem desligar, mesmo se a sessão for desconectada. Ele é usado para executar comandos no servidor remoto que levariam muito tempo para serem concluídos (backup de um banco de dados etc).
Normalmente, os logs do script (se houver) são armazenados no arquivo ~/nohup.out. Mas você pode optar por capturar os logs, anexando ou substituindo os logs do conteúdo antigo pelo novo. ">" O sinal único maior que substituirá os logs antigos pelos novos. ">>" double maior que o sinal anexará os logs ao final do arquivo.
Estou usando este formato abaixo para executar a mesma coisa no crontab. Neste caso, estou substituindo os logs antigos. /path/to/script_folder/script_name.sh > /path/to/script_folder/logs/script_name.log 2>&1