Jak uruchomić „apt-get install” w tle?

17

Gdy próbuję zainstalować pakiet, na przykład nsnake , za pomocą polecenia sudo apt-get install nsnake &, proces natychmiast się zatrzymuje. Mogę przenieść je na pierwszy plan i wprowadzić hasło sudo, wstrzymać je (za pomocą Ctrl- Z) i ponownie wysłać w tło. Ale wtedy powłoka natychmiast wstrzyma proces, np.

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

Czy można zainstalować pakiety w tle? Mogę to zrobić podczas instalowania dużych pakietów na komputerze, na którym jestem SSH.

katriel
źródło

Odpowiedzi:

30

Tak, oczywiście.

Wykonuj swoje apt-getpolecenia za pomocą fantazyjnych rzeczy

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

Objaśnienie części:

  • sudo bash -cCzęść ikra nowy bashproces i biegnie apt-get -y install guake >/dev/null 2>&1 & disownwewnątrz tej nowej powłoki.

  • Te polecenia są następnie uruchamiane w nowej podpowłoce:

    • apt-get -y install guake: Główne polecenie apt-get, które chcesz uruchomić.

      • >/dev/null 2>&1 potoki stdout i stderr do / dev / null.
    • & disown odrzuca poprzednie zadanie i wychodzi z podpowłoki.
kiri
źródło
Czy „tak |” potrzebne, gdy używasz przełącznika -y?
user31389,
@ user31389: Nie ściśle, ale może to pomóc, jeśli pakiet wyświetla dodatkowe monity podczas instalacji.
kiri
Byłoby naprawdę miło zrozumieć, dlaczego to działa (i dlaczego jest konieczne).
katriel
@katriel: Niełatwo to wytłumaczyć. Jednak w mojej odpowiedzi próbowałem wyjaśnić.
kiri
1
@katriel: To dlatego, że Ctrl + Z wstrzymuje polecenie, co oznacza, że ​​jest ono wstrzymane (tymczasowo zatrzymane).
kiri
17

Zawsze lubię używać screena do uruchamiania programów w tle.

jeukku
źródło
2
+1 dla ekranu. Jest łatwy w użyciu i doskonały dla programów w tle, do których od czasu do czasu chcesz uzyskać dostęp, takich jak klient IRC lub jako zamiennik wielu połączeń ssh, gdy potrzebujesz szybkiego dostępu do zestawu ścieżek lub plików wielokrotnie
Pichan
4
Chociaż teoretycznie może to odpowiedzieć na pytanie, lepiej byłoby zawrzeć tutaj istotne części odpowiedzi i podać odnośnik.
blade19899
1
Wolę tmux od screena .
Michael
9

Dodaj znak ampersand, &aby uruchomić dowolny program i wróć do monitu podczas działania programu, np

sudo apt-get -y install nsnake &

Jednak niektóre zdarzenia i powiadomienia mogą pojawiać się okresowo w powłoce. Aby ukryć te zdarzenia, potokuj je do STDOUT

sudo apt-get -y install nsnake >/dev/null &
MDMoore313
źródło
1
Wydarzenia były problemem. Wydaje się, że rozwiązaniem jest podłączenie ich do STDOUT.
katriel
-1

Jest to obejście, ale najpierw uruchom cokolwiek z sudo, np sudo ls. Twoja autoryzacja sudo zostanie na chwilę zapamiętana. Następnie możesz po prostu uruchomić sudo apt-get -y install nsnake &i nie będziesz proszony o hasło po raz drugi (chyba że minęło trochę czasu i upłynęła autoryzacja).

użytkownik31389
źródło
Nadal musisz wpisać y po znaku zachęty, na co nie pozwala ci komendant.
kiri
@ minerz029 Och, racja. Naprawiony.
user31389,
Jestem prawie pewien, że ani autoryzacja sudo, ani komunikat „T / n” nie przeszkadzają, ponieważ nie muszę tego robić, jeśli wyślę to zadanie na pierwszy plan.
katriel