Como posso executar o "apt-get install" em segundo plano?

17

Quando tento instalar um pacote, por exemplo , nsnake , com o comando sudo apt-get install nsnake &, o processo para imediatamente. Eu posso trazê-lo para o primeiro plano e inserir minha senha do sudo, pausar (com Ctrl- Z) e enviá-la de volta ao segundo plano. Mas o shell interromperá imediatamente o processo, por exemplo,

katriel@caseylaptop:~$ bg     
[2]+ sudo apt-get install nsnake &   
[2]+  Stopped                 sudo apt-get install nsnake

É possível instalar pacotes em segundo plano? Talvez eu queira fazer isso ao instalar pacotes grandes em um computador em que estou usando o SSH.

katriel
fonte

Respostas:

30

Sim claro.

Execute seu apt-getcomando com coisas sofisticadas ao seu redor

sudo bash -c 'apt-get -y install guake >/dev/null 2>&1 & disown'

Explicação da parte:

  • A sudo bash -cpeça gera um novo bashprocesso e é executada apt-get -y install guake >/dev/null 2>&1 & disowndentro desse novo shell.

  • Esses comandos são executados dentro do novo subshell:

    • apt-get -y install guake: O principal comando apt-get que você deseja executar.

      • >/dev/null 2>&1 canaliza stdout e stderr para / dev / null.
    • & disown rejeita o trabalho anterior e sai do subshell.
kiri
fonte
É "sim |" necessário quando você usa a opção -y?
user31389
@ user31389: Não estritamente, mas pode ajudar se um pacote tiver mais avisos durante a instalação.
kiri
Seria muito bom entender por que isso funciona (e por que é necessário).
Katriel
@katriel: Não é tão fácil de explicar. Eu tentei uma explicação na minha resposta, no entanto.
kiri
1
@katriel: É porque Ctrl + Z pausa o comando, o que significa que ele está em pausa (parado temporariamente).
kiri
17

Eu sempre gosto de usar a tela para executar programas em segundo plano.

jeukku
fonte
2
+1 para tela. É fácil de usar e ótimo para programas de fundo que você quer acesso ao longo do tempo, como um cliente de IRC ou como um substituto para múltiplas conexões SSH quando você precisa para acessar rapidamente um conjunto de caminhos ou arquivos repetidamente
Pichan
4
Embora isso possa teoricamente responder à pergunta, seria preferível incluir aqui as partes essenciais da resposta e fornecer o link para referência.
blade19899
1
Eu prefiro o tmux para a tela.
Michael
9

Adicione o e comercial &para executar qualquer programa e retorne ao prompt enquanto o programa é executado, como

sudo apt-get -y install nsnake &

Você pode obter certos eventos e notificações aparecendo periodicamente no shell, no entanto. Para ocultar esses eventos, canalize-os para STDOUT

sudo apt-get -y install nsnake >/dev/null &
MDMoore313
fonte
1
Os eventos foram o problema. A solução parece ser canalizá-los para STDOUT.
Katriel
-1

É uma solução alternativa, mas primeiro execute qualquer coisa com o sudo, por exemplo sudo ls. Sua autorização do sudo será lembrada por um tempo. Em seguida, você pode simplesmente executar sudo apt-get -y install nsnake &e não será solicitada uma senha pela segunda vez (a menos que tenha passado algum tempo e a autorização tenha expirado).

user31389
fonte
Você ainda precisa digitar y no prompt, o que o commant não deixará.
kiri
@ minez029 Oh, certo. Fixo.
user31389
Tenho certeza de que nem a autorização do sudo nem o prompt "Y / n" estão interferindo, já que não preciso fazer isso se levar o trabalho para o primeiro plano.
Katriel