Wie kann ich "apt-get install" im Hintergrund ausführen?

17

Wenn ich versuche, ein Paket, zum Beispiel nsnake , mit dem Befehl zu installieren, sudo apt-get install nsnake &stoppt der Prozess sofort. Ich kann es in den Vordergrund bringen und mein sudo-Passwort eingeben, es anhalten (mit Ctrl- Z) und es wieder in den Hintergrund zurückschicken. Aber dann wird die Shell den Prozess sofort anhalten, zB

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

Ist es möglich, Pakete im Hintergrund zu installieren? Möglicherweise möchte ich dies tun, während ich große Pakete auf einem Computer installiere, auf dem ich SSH ausführe.

katriel
quelle

Antworten:

30

Ja sicher.

Führen Sie Ihren apt-getBefehl mit ausgefallenen Dingen aus

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

Teil erklärung:

  • Das sudo bash -cTeil erzeugt einen neuen bashProzess und wird apt-get -y install guake >/dev/null 2>&1 & disownin dieser neuen Shell ausgeführt.

  • Diese Befehle werden dann in der neuen Subshell ausgeführt:

    • apt-get -y install guake: Der Hauptbefehl apt-get, den Sie ausführen möchten.

      • >/dev/null 2>&1 leitet stdout und stderr nach / dev / null.
    • & disown Verweigert den vorherigen Job und beendet die Subshell.
kiri
quelle
Ist "ja |" benötigt, wenn Sie den Schalter -y verwenden?
user31389
@ user31389: Nicht unbedingt, aber es kann hilfreich sein, wenn ein Paket während der Installation weitere Eingabeaufforderungen enthält.
kiri
Wäre wirklich nett zu verstehen, warum das funktioniert (und warum es notwendig ist).
Katriel
@katriel: Es ist nicht so einfach zu erklären. Ich habe jedoch versucht, eine Erklärung in meiner Antwort zu finden.
Kiri
1
@katriel: Es ist , weil Sie Strg + Z pausiert den Befehl, dh es angehalten wird (vorübergehend gestoppt).
Kiri
17

Ich benutze immer gerne den Bildschirm , um Programme im Hintergrund auszuführen.

jeukku
quelle
2
+1 für Bildschirm. Es ist einfach zu bedienen und ideal für Hintergrund Programme , die Sie von Zeit zu Zeit zugreifen möchten, wie ein IRC - Client oder als Ersatz für mehrere SSH - Verbindungen , wenn Sie benötigen , um schnell Zugriff auf eine Reihe von Pfaden oder Dateien wiederholt
Pichan
4
Während dies theoretisch die Frage beantworten mag, wäre es vorzuziehen , die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen.
Blade19899
1
ich ziehe tmux dem screen vor.
Michael
9

Fügen Sie das kaufmännische Und hinzu &, um ein Programm auszuführen , und kehren Sie zur Eingabeaufforderung zurück, während das Programm ausgeführt wird, z

sudo apt-get -y install nsnake &

Es kann jedoch vorkommen, dass bestimmte Ereignisse und Benachrichtigungen regelmäßig in der Shell angezeigt werden. Um diese Ereignisse auszublenden, leiten Sie sie an STDOUT weiter

sudo apt-get -y install nsnake >/dev/null &
MDMoore313
quelle
1
Die Ereignisse waren das Problem. Die Lösung scheint darin zu bestehen, sie an STDOUT weiterzuleiten.
Katriel
-1

Es ist eine Problemumgehung, aber führen Sie zuerst etwas mit sudo aus, z sudo ls. Ihre sudo-Berechtigung wird für eine Weile gespeichert. Dann können Sie einfach loslegen sudo apt-get -y install nsnake &und werden nicht zum zweiten Mal nach einem Passwort gefragt (es sei denn, es ist einige Zeit vergangen und die Autorisierung ist abgelaufen).

user31389
quelle
Sie müssen an der Eingabeaufforderung noch y eingeben, was Ihr Commant nicht zulässt.
kiri
@ minerz029 Oh, richtig. Fest.
user31389
Ich bin mir ziemlich sicher, dass weder die sudo-Autorisierung noch die Eingabeaufforderung "J / N" stören, da ich auch nichts tun muss, wenn ich den Job in den Vordergrund bringe.
Katriel