Сделать apt-get update и обновить автоматизировать и без присмотра


28

У меня есть около 7 серверов Debian, которыми я управляю, и я бы хотел настроить их на автоматическое обновление. Итак, я создал скрипт как таковой:

#!/bin/sh
apt-get update
apt-get upgrade

и поместил его в rootсписок crontab. К сожалению, он всегда висит в разделе Обновление, спрашивая, уверен ли я, что хочу обновить. Поскольку это работа cron, я не вижу вывод, пока он не напишет мне, что он провалился. Есть ли способ, чтобы пропустить это приглашение и просто выполнить обновление автоматически?


3
... или cron-apt.
Дероберт

Ответы:


46

Используйте опцию -y, чтобы apt-get не спрашивал. От man apt-get:

   -y, --yes, --assume-yes
       Automatic yes to prompts; assume "yes" as answer to all prompts and
       run non-interactively. If an undesirable situation, such as
       changing a held package, trying to install a unauthenticated
       package or removing an essential package occurs then apt-get will
       abort. Configuration Item: APT::Get::Assume-Yes.

Вы также можете установить переменную DEBIAN_FRONTEND env

DEBIAN_FRONTEND=noninteractive apt-get -y upgrade

1
Что делает DEBIAN_FRONTEND? Используется ли он и для других процессов?
Канадец Люк восстановит Монику

Я пытаюсь сделать это на своем домашнем сервере и выберу лучший ответ, как только он запустится
канадец Люк REINSTATE MONICA

1
@CanadianLuke смотрите здесь для DEBIAN_FRONTEND. Это не упомянуто в моем Debian man debconf, так что это может быть вещь Ubuntu.
Terdon

@terdon У вас нет пакета -doc для debconf. Это в 7 разделе человека man 7 debconf;)
Брайам

@ Брайам ах, хорошо, я видел это и пытался, man 7 debconfно ничего не получил. Теперь я знаю, почему :)
Terdon

27

Ну, может быть, вы используете не тот инструмент. unattended-upgradesпакет устанавливает обновления безопасности ежедневно (можно настроить), вы можете настроить, какие пакеты обновлять или не обновлять и т. д. Можно установить с помощью:

sudo apt-get install unattended-upgrades

От man unattended-upgrades:

Конфигурация осуществляется через механизм конфигурации apt. Файл конфигурации по умолчанию можно найти по адресу /etc/apt/apt.conf.d/50unattended-upgrades.


@CanadianLuke это читает все конфигурации в, /etc/apt/apt.conf.d/но только те, которые начинаются с, Unattended-Upgrade::анализируются.
Брайам

Я пытаюсь сделать это на одном из серверов в работе, и, как только он будет запущен, я выберу лучший ответ
канадец Люк REINSTATE MONICA

10

в то время как предыдущие ответы являются информативными, они не обходят «проблему» ввода, требуемую человеческими средствами во время upgrade. поэтому я использую следующее:

export DEBIAN_FRONTEND=noninteractive
export DEBIAN_PRIORITY=critical
sudo -E apt-get -qy update
sudo -E apt-get -qy -o "Dpkg::Options::=--force-confdef" -o "Dpkg::Options::=--force-confold" upgrade
sudo -E apt-get -qy autoclean

чтобы включить обновления дистрибутива, такие как ядра, используйте dist-upgradeкоманду.

пожалуйста, обратитесь к руководствуdpkg за подробной информацией об этих параметрах.

importat note : требуется вызов, sudoвключая -Eпараметр:

Indicates to the security policy that the user wishes to preserve their existing environment variables. The security policy may return an error if the user does not have permission to preserve the environment.

в противном случае EXPORTзаявления не будут влиять на вызовы apt-get!

заслуга Реми ван Элста ! Благодарность!


1
Не могли бы вы объяснить, почему вы добавили другие опции в обновление apt-get?
FarO

1
Кроме того, требуется ли sudo -E, если скрипт запускается из crontab Ротта?
FarO

1
@FarO, это зависит от того, в какой среде / в каком контексте вы хотели бы запустить cronjob. как правило, они управляются root- так что вам вообще не нужно их использовать sudo. «другие параметры» настроены для запуска без присмотра в любом случае. пожалуйста, смотрите ссылочную manстраницу.
джиттер

4

Универсальный инструмент для такого рода вещей yes:

DESCRIPTION
       Repeatedly output a line with all specified STRING(s), or 'y'.

Так, например, вы могли бы сделать

yes | sudo apt-get upgrade 

Обратите внимание, что в конкретном случае лучше apt-get upgradeиспользовать параметры, предложенные @Braiam или @ArthurUlfeldt .


Строка, которую я вставляю, когда хочу сделать это вручную apt-get update && yes | apt-get upgrade(наши серверы не должны использовать sudo... Не спрашивайте ...)
канадец Люк. ОБНОВЛЕНИЕ МОНИКИ,

Зачем использовать трюк вместо уже предоставленной опции ?? "-y" уже в apt-get.
FarO

3
Потому что, как я сказал в ответе, это универсальный инструмент для такого рода операций, поэтому этот ответ предназначен для других случаев, а не для apt. Вы не читали последний абзац? Или первое предложение?
Terdon
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.