Comment puis-je exécuter «apt-get install» en arrière-plan?

17

Lorsque j'essaie d'installer un package, par exemple nsnake , avec la commande sudo apt-get install nsnake &, le processus s'arrête immédiatement. Je peux le mettre au premier plan et entrer mon mot de passe sudo, le mettre en pause (avec Ctrl- Z) et le renvoyer à l'arrière-plan. Mais le shell suspendra immédiatement le processus, par exemple,

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

Est-il possible d'installer des packages en arrière-plan? Je peux vouloir le faire lors de l'installation de gros packages sur un ordinateur sur lequel je suis SSH.

Katriel
la source

Réponses:

30

Oui bien sûr.

Exécutez votre apt-getcommande avec des objets de fantaisie autour d'elle

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

Explication de la pièce:

  • La sudo bash -cpartie génère un nouveau bashprocessus et s'exécute à l' apt-get -y install guake >/dev/null 2>&1 & disownintérieur de ce nouveau shell.

  • Ces commandes sont ensuite exécutées à l'intérieur du nouveau sous-shell:

    • apt-get -y install guake: La principale commande apt-get que vous souhaitez exécuter.

      • >/dev/null 2>&1 dirige stdout et stderr vers / dev / null.
    • & disown annule le travail précédent et quitte le sous-shell.
kiri
la source
Est "oui |" nécessaire lorsque vous utilisez le commutateur -y?
user31389
@ user31389: Pas strictement, mais cela peut aider si un package a d'autres invites lors de l'installation.
kiri
Ce serait vraiment bien de comprendre pourquoi cela fonctionne (et pourquoi c'est nécessaire).
katriel
@katriel: Ce n'est pas si facile à expliquer. J'ai tenté une explication dans ma réponse, cependant.
kiri
1
@katriel: C'est parce que Ctrl + Z interrompt la commande, ce qui signifie qu'elle est suspendue (temporairement arrêtée).
kiri
17

J'aime toujours utiliser l' écran pour exécuter des programmes en arrière-plan.

jeukku
la source
2
+1 pour l'écran. Il est facile à utiliser et idéal pour les programmes d'arrière-plan auxquels vous souhaitez accéder de temps à autre, comme un client irc ou comme substitut à plusieurs connexions ssh lorsque vous devez accéder rapidement à un ensemble de chemins ou de fichiers à plusieurs reprises
Pichan
4
Bien que cela puisse théoriquement répondre à la question, il serait préférable d'inclure ici les parties essentielles de la réponse et de fournir le lien de référence.
blade19899
1
je préfère tmux à l'écran.
Michael
9

Ajoutez l'esperluette &pour exécuter n'importe quel programme et revenez à l'invite pendant l'exécution du programme, telle que

sudo apt-get -y install nsnake &

Cependant, certains événements et notifications peuvent apparaître périodiquement dans le shell. Pour masquer ces événements, redirigez-les vers STDOUT

sudo apt-get -y install nsnake >/dev/null &
MDMoore313
la source
1
Les événements étaient le problème. La solution semble être de les rediriger vers STDOUT.
katriel
-1

C'est une solution de contournement, mais exécutez d'abord n'importe quoi avec sudo, par exemple sudo ls. Votre autorisation sudo restera en mémoire pendant un certain temps. Ensuite, vous pouvez simplement exécuter sudo apt-get -y install nsnake &et on ne vous demandera pas de mot de passe une deuxième fois (sauf si un certain temps s'est écoulé et que l'autorisation a expiré).

user31389
la source
Vous devez toujours taper y à l'invite, ce que votre habitué ne vous laissera pas faire.
kiri
@ minerz029 Oh, c'est vrai. Fixé.
user31389
Je suis sûr que ni l'autorisation sudo ni l'invite "Y / n" qui interfèrent, car je n'ai pas à le faire non plus si je mets le travail au premier plan.
katriel