1

Я установил cron root для автоматического запуска apt-get upgrade . Достаточно просто. Вот конкретная строка:

@daily (apt-get update && apt-get -y upgrade) 2>&1 > /var/log/tmp.log

Тем не менее, я следил за выводом файла журнала, и он всегда останавливался на той части вывода, где он обычно (то есть без -y) спрашивал: Do you want to continue [Y/n]? , Я подтверждаю, что он не продолжал работать, потому что при apt-get upgrade все еще отображаются пакеты, которые необходимо обновить. Почему это останавливается на этом этапе? И как мне заставить его продолжать?

Редактировать:

### apt-get update output ###  

Building dependency tree...
Reading state information...
The following packages have been kept back:
  linux-generic linux-headers-generic linux-image-generic
The following packages will be upgraded:
  file libgudev-1.0-0 libmagic1 libpam-systemd libsystemd-daemon0
  libsystemd-login0 libudev1 linux-libc-dev openssh-client openssh-server
   systemd-services udev
12 upgraded, 0 newly installed, 0 to remove and 3 not upgraded.
Need to get 0 B/3,412 kB of archives.
After this operation, 16.4 kB of additional disk space will be used.

Редактировать 2: я сократил команду, чтобы попытаться изолировать проблему. Я также читал о man apt-get. Я нашел новый потенциальный флаг для прохождения, оставив меня с:

@daily apt-get -y --force-yes upgrade 2>&1 > /var/log/tmp.log

К сожалению, я все еще получаю те же результаты :(

2 ответа2

2

tldr; Не думайте , что все переменные окружения в cron (включая PATH

Через пару дней я понял, что я идиот, и поставил 2>&1 в неправильном месте. Поместив его после имени файла журнала, он дал мне ошибки, вызывающие мою проблему:

dpkg: warning: 'ldconfig' not found in PATH or not executable
dpkg: warning: 'start-stop-daemon' not found in PATH or not executable
dpkg: error: 2 expected programs not found in PATH or not executable
Note: root's PATH should usually contain /usr/local/sbin, /usr/sbin and /sbin

С этой новой информацией я, наконец, нашел еще один пост с той же проблемой. Оказывается, у cron очень ограниченные переменные окружения. Это произошло из-за старых атак на cron которые использовали указанные переменные. Это означает, что PATH никогда не загружается (указано в приведенной выше ошибке), и поэтому некоторые команды, от которых зависит apt-get upgrade не могут быть запущены. Это можно исправить, установив PATH вручную в cron .

Есть также некоторые другие ошибки, связанные с тем, что debconf нужен управляющий tty. Это не мешает выполнению команды, но их можно подавить, установив переменную среды DEBIAN_FRONTEND в cron .

Вот оно во всей красе:

PATH=/usr/bin:/bin:/usr/sbin:/sbin
DEBIAN_FRONTEND=noninteractive
@daily apt-get -y upgrade > /var/log/tmp.log 2>&1
0

Какие пакеты не обновляются?

Вы уверены, что не хотите apt-get dist-upgrade? Например, пакет linux-image-* не может быть обновлен просто с помощью обновления apt-get upgrade поскольку установлен новый пакет. Новые пакеты устанавливаются только с dist-upgrade .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .