“склонный - получают обновление-y” в выполнениях задачи крона, но не обновляет систему

Этот сервер выполняет Debian 7, и я сталкиваюсь с большой тайной.

Вот мои задачи крона:

$ sudo crontab -e

42 15 * * * apt-get -y update >> /var/log/my-apt-update.txt
52 15 * * * apt-get -y upgrade >> /var/log/my-apt-upgrade.txt

Я добавил ">> /var/log/my-apt-upgrade.txt" часть, потому что я пытаюсь понять, почему моя система никогда не обновляется.

Задачи крона выполняются. Каждый день у меня есть эти строки в/var/log/syslog:

Nov 14 15:42:01 myhostname /USR/SBIN/CRON[3374]: (root) CMD (apt-get -y update >> /var/log/my-apt-update.txt)
Nov 14 15:52:01 myhostname /USR/SBIN/CRON[3394]: (root) CMD (apt-get -y upgrade >> /var/log/my-apt-upgrade.txt)

И /var/log/my-apt-upgrade.txt имеет абзацы как это (я только показываю прошлые два дня):

Reading package lists...
Building dependency tree...
Reading state information...
The following packages will be upgraded:
  file libmagic1
2 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B/256 kB of archives.
After this operation, 110 kB disk space will be freed.
Reading package lists...
Building dependency tree...
Reading state information...
The following packages will be upgraded:
  file libmagic1
2 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B/256 kB of archives.
After this operation, 110 kB disk space will be freed.

Как Вы видите, пакеты "файл" и "libmagic1" должны были быть обновлены первый день. Но они не были. Так второй день, они упоминаются снова. Но не обновленный.

И сегодня, если я работаю

$ sudo apt-get -y upgrade

пакеты "файл" и "libmagic1" упоминаются снова, и они обновлены (наконец).

Так, как Вы видите, я могу обновить вручную. Но эти пакеты должны были быть обновлены ранее, когда задача крона работала.

Какая-либо подсказка об этой тайне?

Дополнение суббота 15 ноября 11:48:

вот то, что появляется в моем /var/log/apt/history.log во время заданий крона.

Start-Date: 2014-11-13  15:52:03
Commandline: apt-get -y upgrade
Upgrade: file:amd64 (5.11-2+deb7u5, 5.11-2+deb7u6), libmagic1:amd64 (5.11-2+deb7u5, 5.11-2+deb7u6)
Error: Sub-process /usr/bin/dpkg returned an error code (2)
End-Date: 2014-11-13  15:52:03

Start-Date: 2014-11-14  15:52:03
Commandline: apt-get -y upgrade
Upgrade: file:amd64 (5.11-2+deb7u5, 5.11-2+deb7u6), libmagic1:amd64 (5.11-2+deb7u5, 5.11-2+deb7u6)
Error: Sub-process /usr/bin/dpkg returned an error code (2)
End-Date: 2014-11-14  15:52:03

Тот же вид сообщения происходит в /var/log/apt/history.log для различных пакетов. Например, ранее в этом месяце, для "wget" пакета было нужно некоторое обновление (я попробовал-qq опцией на этот раз, но эта опция, кажется, не имеет значения).

Start-Date: 2014-11-03  15:52:02
Commandline: apt-get -y -qq upgrade
Upgrade: wget:amd64 (1.13.4-3+deb7u1, 1.13.4-3+deb7u2)
Error: Sub-process /usr/bin/dpkg returned an error code (2)
End-Date: 2014-11-03  15:52:02

Start-Date: 2014-11-04  15:52:02
Commandline: apt-get -y -qq upgrade
Upgrade: wget:amd64 (1.13.4-3+deb7u1, 1.13.4-3+deb7u2)
Error: Sub-process /usr/bin/dpkg returned an error code (2)
End-Date: 2014-11-04  15:52:03

Start-Date: 2014-11-05  15:52:03
Commandline: apt-get -y -qq upgrade
Upgrade: wget:amd64 (1.13.4-3+deb7u1, 1.13.4-3+deb7u2)
Error: Sub-process /usr/bin/dpkg returned an error code (2)
End-Date: 2014-11-05  15:52:03
2
задан 15 November 2014 в 12:54
1 ответ

Похоже, я нашел причину проблемы.

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

Чтобы поймать stderr в моем журнале, я сначала изменил задачу cron на:

52 15 * * * apt-get -y upgrade >> /var/log/my-apt-upgrade.txt 2>&1

Сегодня пакет "wlibgcrypt11" должен был быть обновлен. На этот раз мой журнал обнаружил ошибку. Это было более явным, чем расплывчатое сообщение об ошибке, которое появилось ранее в /var/log/apt/history.log.[12158ptingIn /var/log/my-apt-upgrade.txt сегодня:

Reading package lists...
Building dependency tree...
Reading state information...
The following packages will be upgraded:
  libgcrypt11
debconf: unable to initialize frontend: Dialog
debconf: (TERM is not set, so the dialog frontend is not usable.)
debconf: falling back to frontend: Readline
debconf: unable to initialize frontend: Readline
debconf: (This frontend requires a controlling tty.)
debconf: falling back to frontend: Teletype
dpkg-preconfigure: unable to re-open stdin: 
1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B/300 kB of archives.
After this operation, 35.8 kB of additional disk space will be used.
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
E: Sub-process /usr/bin/dpkg returned an error code (2)

Так что это было Ошибка PATH.

Путь root в моей системе содержит все необходимые каталоги. То же самое и с переменной secure_path в visudo. Вот почему все работает, когда я запускаю sudo apt-get вручную.

Но cron не устанавливает переменные среды. Поэтому я добавил переменную среды PATH для каждой задачи cron.

$ sudo crontab -e

22 16 * * * PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin' apt-get -y update >> /var/log/my-new-apt-update.txt 2>&1
32 16 * * * PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin' apt-get -y upgrade >> /var/log/my-new-apt-upgrade.txt 2>&1

И это сработало! Пакет был успешно обновлен задачей cron.

6
ответ дан 3 December 2019 в 09:16

Теги

Похожие вопросы