Вопрос или проблема
Когда я пытаюсь установить пакет, например, 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.
Да, конечно.
Выполните команду 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
открепляет предыдущую задачу и выходит из под оболочки.
-
Мне всегда нравится использовать screen для запуска программ в фоновом режиме.
Добавьте амперсанд &
, чтобы запустить любую программу и вернуться к командной строке, пока программа выполняется, например,
sudo apt-get -y install nsnake &
Вы можете получить определенные события и уведомления, которые периодически появляются в оболочке, однако. Чтобы скрыть эти события, направьте их на STDOUT
sudo apt-get -y install nsnake >/dev/null &
Для тех, кому нужно выполнить обновление apt в фоновом режиме, при этом сохраняя логи для проверки.
sudo nohup bash -c 'apt update -y && apt upgrade -y' 2>&1 | sudo tee -a /var/log/apt_upgrade.log > /dev/null &
disown
Это обходной путь, но сначала запустите что-нибудь с sudo, например, sudo ls
. Ваши полномочия sudo будут запомнены на некоторое время. Затем вы можете просто запустить sudo apt-get -y install nsnake &
и вас не попросят ввести пароль второй раз (если, конечно, не прошло слишком много времени и полномочия не истекли).
Ответ или решение
Чтобы запустить команду "apt-get install" в фоновом режиме в операционной системе на базе Ubuntu, необходимо учесть несколько аспектов. Хотя команда "apt-get" является мощным инструментом для управления пакетами Linux, её выполнение в фоновом режиме может быть не таким простым, как это может показаться на первый взгляд. При использовании с символом амперсанда (&), процесс отправляется в фон, но, как вы уже заметили, может быть остановлен из-за необходимости ввода пароля для sudo. Рассмотрим шаги, которые вам помогут успешно выполнить установку в фоновом режиме.
Теория
Когда мы используем команду "apt-get" для установки программного обеспечения, она требует административных прав. Это делается с помощью команды sudo
, которая повышает привилегии пользователя до уровня суперпользователя. Однако изначальное выполнение sudo
может потребовать ввода пароля, что создаёт сложности при запуске команд в фоновом режиме. Через комбинацию командных возможностей bash, таких как nohup
и disown
, процесс можно сделать независимым от текущей сессии терминала, избегая его остановки.
Пример
Рассмотрим следующую команду, которая позволяет запустить установку пакета в фоновом режиме с минимальными взаимодействиями с пользователем:
sudo bash -c 'apt-get -y install nsnake >/dev/null 2>&1 & disown'
Основные компоненты этой команды включают:
-
sudo bash -c
: создание новой bash-сессии с повышенными привилегиями. Это позволяет избежать взаимодействия с пользователем после первоначального запроса пароля. -
apt-get -y install nsnake
: прямая команда для установки пакета. Опция-y
автоматически подтверждает все запросы, облегчая установку без участия пользователя. -
>/dev/null 2>&1
: перенаправление стандартного и ошибочного вывода в "чёрную дыру", обеспечивая устранение ненужного вывода в терминал. -
& disown
: отправка процесса в фон и разрыв связи между ним и текущей сессией, таким образом предотвращая его остановку при закрытии терминала.
Применение
Для практического применения подобного подхода может потребоваться управление несколькими установками или обновлениями пакетов на удалённом сервере через SSH. Этот подход позволит вам свободно запустить процесс, выйти из SSH, не боясь его остановки, и вернуться к другим задачам.
Кроме того, некоторые пользователи предпочитают использовать утилиты, такие как screen
или tmux
, которые позволяют выполнять процесс независимой сессии терминала. Это предоставляет дополнительный уровень контроля, позволяя пользователю при необходимости вновь подключиться к сессии.
Если вам нужна возможность отслеживания процесса и сообщений об ошибках, используйте команду nohup
и записывайте вывод в файл журнала:
sudo nohup bash -c 'apt-get -y install nsnake' > install.log 2>&1 &
Вывод будет записан в файл install.log
, что позволит вам анализировать процесс даже после завершения установки.
Заключение
Выбор наилучшего подхода зависит от ваших функциональных потребностей и рабочего окружения. Помните, что перед введением любой команды с sudo
, полезно сначала выполнить любую команду, не требующую интерактивного пароля, с sudo
, чтобы избежать его запроса во время выполнения фоновой команды. В конечном итоге это сэкономит ваше время и усилия при управлении пакетами в системах на базе Linux.