Как мне запустить «apt-get install» в фоновом режиме?


17

Когда я пытаюсь установить пакет, например, nsnake , с помощью команды sudo apt-get install nsnake &, процесс немедленно останавливается. Я могу вывести его на передний план и ввести свой пароль sudo, поставить его на паузу (с Ctrl- Z) и снова отправить обратно на задний план. Но тогда оболочка сразу приостановит процесс, например,

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

Можно ли устанавливать пакеты в фоновом режиме? Я могу захотеть сделать это при установке больших пакетов на компьютер, на котором я работаю по SSH.

Ответы:


30

Да, конечно.

Выполните свою apt-getкоманду с причудливыми вещами вокруг нее

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

Часть объяснения:

  • Эта sudo bash -cчасть порождает новый bashпроцесс и запускается apt-get -y install guake >/dev/null 2>&1 & disownвнутри этой новой оболочки.

  • Эти команды затем запускаются внутри нового подоболочки:

    • apt-get -y install guake: Основная команда apt-get, которую вы хотите запустить.

      • >/dev/null 2>&1 трубы stdout и stderr в / dev / null.
    • & disown Отказывается от предыдущей работы и выходит из подоболочки.

"Да |" нужен, когда вы используете ключ -y?
user31389

@ user31389: Не совсем, но может помочь, если у пакета появятся дополнительные подсказки во время установки.
Кири

Было бы очень приятно понять, почему это работает (и почему это необходимо).
Катриэль

@katriel: это не так просто объяснить. Я попытался объяснить в своем ответе, хотя.
Кири

1
@katriel: Это потому, что Ctrl + Z ставит команду на паузу , что означает, что она приостановлена ​​(временно остановлена).
Кири

17

Мне всегда нравится использовать экран для запуска программ в фоновом режиме.


2
+1 за экран. Он прост в использовании и отлично подходит для фоновых программ, к которым вы хотите обращаться время от времени, например, для irc-клиента или в качестве замены для нескольких ssh-соединений, когда вам нужно многократно обращаться к набору путей или файлов
Pichan

4
Хотя это может теоретически ответить на вопрос, было бы предпочтительным включить здесь основные части ответа и предоставить ссылку для справки.
blade19899

1
Я предпочитаю Tmux на экране.
Майкл

9

Добавьте амперсанд &для запуска любой программы и вернитесь к приглашению во время выполнения программы, например:

sudo apt-get -y install nsnake &

Однако в оболочке могут периодически появляться определенные события и уведомления. Чтобы скрыть эти события, направьте их в STDOUT

sudo apt-get -y install nsnake >/dev/null &

1
События были проблемой. Решение, кажется, состоит в том, чтобы направить их в STDOUT.
Катриэль

-1

Это обходной путь, но сначала запустите что-нибудь с помощью sudo, например sudo ls. Ваше разрешение sudo запомнится на некоторое время. Затем вы можете просто запустить, sudo apt-get -y install nsnake &и вам не будет предложено ввести пароль во второй раз (если не прошло какое-то время и не истек срок авторизации).


Вам все еще нужно набрать y в приглашении, что ваш комант не позволит вам сделать.
Кири

@ minerz029 О, верно. Исправлена.
user31389

Я почти уверен, что ни авторизация sudo, ни приглашение «Y / n» не мешают, так как мне не нужно ничего делать, если я вывожу работу на первый план.
Катриэль
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.