Criei uma screen
sessão e executei rsync
dentro dela:
screen -S rsync_backup
rsync -rvnc data/ data2 >rsync_out-4.txt 2>rsync_outErr-4.txt
Usei o top
comando para monitorar o progresso e inicialmente vi tanto o screen
e rsync
na top
saída (um exemplo de brinquedo está abaixo):
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1619 denis 20 0 170096 4644 0 S 0.0 0.0 0:00.00 rsync
1739 denis 20 0 7320 2828 2064 S 0.0 0.0 0:00.02 screen
Algum tempo depois não havia rsync
, mas screen
ainda estaria presente na top
saída:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1739 denis 20 0 7320 2828 2064 S 0.0 0.0 0:00.02 screen
Minhas perguntas são:
- A sessão deve
screen
ser encerrada automaticamente quando o comando (rsync
no meu caso) em execução naquela sessão for concluído? - O cenário típico
user
pressupõe a eliminação manual obrigatóriascreen
da sessão apósrsync
o término da execução do comando (por exemplo, )? Ou seja:
screen -S rsync_backup
rsync -rvnc data/ data2 >rsync_out-4.txt 2>rsync_outErr-4.txt
screen -XS <session-id> quit
Tenho que discordar da resposta de @ReflectYourCharacter.
Uma sessão de tela termina automaticamente quando o comando dentro dela termina. No entanto, se você tiver um shell em execução, o shell é o comando.
Por exemplo, se você digitar:
Uma sessão de tela será criada, com uma janela executando o comando
sleep 5
. Quando esse comando sair,screen
exits.Se, por outro lado, você fizer isso
screen -S somename
, esperar por um prompt e digitarsleep 5
nele, o shell continuará em execução naquela janela apóssleep
sair escreen
continuar.Eu sugiro um dos seguintes:
screen
, prefixe seu comando comexec
.Isso fará com que seu comando substitua o shell, e assim a janela e a tela sairão quando seu comando fizer isso.
screen -S rsync_backup sh -c 'rsync -rvnc data/ data2 >rsync_out-4.txt 2>rsync_outErr-4.txt'
Isso executará osh -c '...'
como o comando na janela, e o shell analisará a linha de comando e os redirecionamentos. Com osrsync
acabamentos, osh
escreen
também. Observe que se você não usar osh -c '...'
, os redirecionamentos serão aplicados à saída da tela, o que não é o que você quer.rsync
comando. Então invoque esse comando nascreen
linha de comando. O script evita a necessidade de usarsh -c '...'
, pois ele fornece seu próprio shell.Depende. Se a tela for iniciada com um comando, ela fecha quando o comando termina.
Se executar um shell interativo, a sessão permanecerá aberta até que seja encerrada manualmente.
screen -S test_session ./test
screen -S test_session -dm ./test
screen
permanece aberto porque um shell interativo está em execuçãoscreen -S test_session
exec
garante quethat
a tela seja encerrada automaticamentescreen -S test_session -dm bash -c 'exec ./test'
Se você quiser testar se a sessão de tela ainda existe:
screen -ls
ps
ps aux | grep [s]creen
screen -r test_session
Sim, em casos de uso típicos, os usuários fecham manualmente a sessão de tela quando não precisam mais dela.
Você pode fazer isso:
Matar uma sessão de tela quando o script terminar de executar
screen -d -m "/path/to/that/script"
Fechando a tela pelo script bash
Linux: Encerra a tela quando o processo termina
Sair de uma tela após a conclusão de um script
Qual é a diferença entre "screen -dm" e "screen -Dm"
Execute um programa com tela GNU e desconecte imediatamente após