¿Cómo puedo ejecutar "apt-get install" en segundo plano?

17

Cuando intento instalar un paquete, por ejemplo nsnake , con el comando sudo apt-get install nsnake &, el proceso se detiene inmediatamente. Puedo traerlo al primer plano e ingresar mi contraseña de sudo, pausarlo (con Ctrl- Z) y enviarlo nuevamente al fondo. Pero luego el shell pausará inmediatamente el proceso, por ejemplo,

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

¿Es posible instalar paquetes en segundo plano? Es posible que desee hacer esto mientras instalo paquetes grandes en una computadora en la que estoy utilizando SSH.

katriel
fuente

Respuestas:

30

Si seguro.

Ejecute su apt-getcomando con cosas elegantes a su alrededor.

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

Explicación de la parte:

  • La sudo bash -cparte genera un nuevo bashproceso y se ejecuta apt-get -y install guake >/dev/null 2>&1 & disowndentro de ese nuevo shell.

  • Estos comandos se ejecutan dentro de la nueva subshell:

    • apt-get -y install guake: El comando principal de apt-get que desea ejecutar.

      • >/dev/null 2>&1 canaliza stdout y stderr a / dev / null.
    • & disown rechaza el trabajo anterior y sale de la subshell.
kiri
fuente
Es "sí |" es necesario cuando usa el modificador -y?
user31389
@ user31389: No estrictamente, pero puede ayudar si un paquete tiene más avisos durante la instalación.
kiri
Sería realmente agradable entender por qué esto funciona (y por qué es necesario).
katriel
@katriel: No es tan fácil de explicar. Sin embargo, he intentado una explicación en mi respuesta.
kiri
1
@katriel: es porque Ctrl + Z detiene el comando, lo que significa que está en pausa (detenido temporalmente).
kiri
17

Siempre me gusta usar la pantalla para ejecutar programas en segundo plano.

jeukku
fuente
2
+1 para pantalla. Es fácil de usar y excelente para programas en segundo plano a los que desea acceder de vez en cuando, como un cliente irc o como un sustituto de múltiples conexiones ssh cuando necesita acceder rápidamente a un conjunto de rutas o archivos repetidamente
Pichan
44
Si bien esto puede responder teóricamente la pregunta, sería preferible incluir aquí las partes esenciales de la respuesta y proporcionar el enlace para referencia.
blade19899
1
Prefiero tmux a la pantalla.
Michael
9

Agregue el ampersand &para ejecutar cualquier programa y vuelva al indicador mientras se ejecuta el programa, como

sudo apt-get -y install nsnake &

Sin embargo, es posible que aparezcan ciertos eventos y notificaciones periódicamente en el shell. Para ocultar estos eventos, canalícelos a STDOUT

sudo apt-get -y install nsnake >/dev/null &
MDMoore313
fuente
1
Los eventos fueron el problema. La solución parece ser canalizarlos a STDOUT.
katriel
-1

Es una solución, pero primero ejecute cualquier cosa con sudo, por ejemplo sudo ls. Su autorización de sudo será recordada por un tiempo. Luego puede ejecutar sudo apt-get -y install nsnake &y no se le pedirá una contraseña por segunda vez (a menos que haya pasado algún tiempo y la autorización haya expirado).

usuario31389
fuente
Aún necesita escribir y en el indicador, que su commant no le permitirá hacer.
kiri
@ minerz029 Oh, cierto. Fijo.
user31389
Estoy bastante seguro de que ni la autorización de sudo ni el mensaje "S / n" interfieren, ya que no tengo que hacerlo tampoco si pongo el trabajo en primer plano.
katriel