Почему apt-get терпит неудачу при автоматизации с помощью cron?


15

Я пытаюсь использовать cron для автоматизации моих системных обновлений. Вы можете увидеть мой crontab, команды и возникающие ошибки ниже.

Когда я запускаю upgradedes.sh от имени root, скрипт работает нормально. Когда cron запускает его, он apt-get -y updateзапускается без проблем, но aptitude -y safe-upgradeне работает. Я предполагаю, что эта ошибка: debconf: (This frontend requires a controlling tty.)потому что есть обновление ядра, которое, в свою очередь, обновляет grub, что требует от меня явного заявления, что все в порядке, чтобы перезаписать /boot/grub/menu.lst. Но я не понимаю ошибки пути. И я хотел бы, чтобы обновления, которые не требуют моего контроля, проходили.

Я прочитал этот вопрос, и это пока еще неприемлемое решениеunattended-upgrades , и я могу в конечном итоге использовать его, но почему я не могу использовать cron? Похоже, это должно быть действительно просто и более linuxy.

Crontab

root@daedalus:~/bin# crontab -l
# m h  dom mon dow   command
45 06 * * * ~/bin/upgrades.sh

upgrades.sh

root@daedalus:~/bin# cat upgrades.sh 
#!/bin/bash
/usr/bin/apt-get -y update
/usr/bin/aptitude -y safe-upgrade

ошибки

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:
Fetched 37.6MB in 4min 23s (143kB/s)
dpkg: warning: 'ldconfig' not found on PATH.
dpkg: warning: 'start-stop-daemon' not found on PATH.
dpkg: warning: 'update-rc.d' not found on PATH.
dpkg: 3 expected program(s) not found on PATH.
NB: root's PATH should usually contain /usr/local/sbin, /usr/sbin and /sbin.
E: Sub-process /usr/bin/dpkg returned an error code (2)
A package failed to install.  Trying to recover:
dpkg: warning: 'ldconfig' not found on PATH.
dpkg: warning: 'start-stop-daemon' not found on PATH.
dpkg: warning: 'update-rc.d' not found on PATH.
dpkg: 3 expected program(s) not found on PATH.
NB: root's PATH should usually contain /usr/local/sbin, /usr/sbin and /sbin.
Reading package lists...
Building dependency tree...
Reading state information...
Reading extended state information...
Initializing package states...
Writing extended state information...

Ответы:


10

Сообщения говорят вам, что ваша PATHпеременная окружения неверна.

Попробуйте добавить

PATH=/usr/bin:/bin:/usr/sbin:/sbin

к вершине вашей crontab.

Или вы можете поставить ту же PATHстроку, что и вторая строка ~/bin/upgrades.sh. Таким образом, ваш тест из командной строки и ваш тест из crontabдолжны давать одинаковые результаты.


Понимаю. Я поместил команду в скрипт по ошибке, думая, что строка #! / Bin / bash загрузит обычный путь root. Очевидно, я был неправ. Итак, что в первую очередь определяет путь пользователя по умолчанию и как он применяется?
djeikyb

Почему cron не берет путь пользователя? Лучше добавить путь к crontab или моему скрипту? Есть ли недостатки?
djeikyb

Это должно быть по соображениям безопасности, но я согласен, это раздражает. 1) Если вы поместите его в свой скрипт, вы можете поместить его PATH=...в файл, например ~/.env, и получить его из каждого скрипта, который вы используете, . ~/.envв верхней части скрипта. Затем, если вы измените свой, PATHвам нужно отредактировать только один файл. 2) Если вы вставите его crontab, это означает, что вам не нужно редактировать все свои скрипты cron, но у вас будет два места для редактирования, если вы хотите изменить свои PATH(например, ~/.bashrcи crontab). Что лучше, зависит от вас.
Микель

Здорово. Я думаю, мой вопрос, почему это небезопасно? Я сейчас гуглю, но пока ничего не придумал. Как бы то ни было, я внес изменения и буду отмечать, что они ответят завтра утром, когда он будет запущен, на случай, если что-то пойдет не так.
djeikyb

Хотел бы я знать тоже. Если есть причина, ни документация, ни cronисходный код не говорят, что это такое. Теоретически это может быть принудительное создание согласованной среды, чтобы вы могли скопировать crontab от одного пользователя к другому, но это только PATHизменилось, так что это не может быть причиной.
Микель

14

Хотя ваша основная проблема уже решена, похоже, вы получаете предупреждения debconf, потому что вы запускаете apt-get без интерактивного tty. Чтобы избавиться от этих сообщений, вы можете установить эту переменную среды:

DEBIAN_FRONTEND=noninteractive

1

Существует вики-страница сообщества: Причина, по которой crontab не работает . В этом случае кажется, что причиной являются ограниченные переменные окружения cron. Можете ли вы запустить это из сценария оболочки в /etc/cron.daily?


Не понял ваш ответ, поэтому комментировать нечего.
Лури

0

Из CronHowto :

В зависимости от выполняемых команд вам может потребоваться расширить переменную PATH корневого пользователя, поместив следующую строку в верхней части их файла crontab:

PATH = / USR / SBIN: / USR / бен: / SBIN: / бен

Но на самом деле все вроде бы так же, как и вы ... Откуда вы взяли эти ошибки?

CRONTAB:

root@PORTATIL:/var/log$ crontab -l
* * */2 * * /usr/share/myupdate.sh > /var/log/myupdate.log

СЦЕНАРИЙ:

root@PORTATIL:/etc# cat /usr/share/myupdate.sh 
#!/bin/bash
#Testing updates
apt-get update -y
apt-get upgrade -y

ЖУРНАЛ:

root@PORTATIL:/etc# cat /var/log/myupdate.log 

Hit http://security.ubuntu.com lucid-security Release.gpg
Hit http://archive.canonical.com lucid Release.gpg
Hit http://archive.canonical.com lucid Release.gpg
Hit http://packages.medibuntu.org lucid Release.gpg
Get:1 http://dl.google.com stable Release.gpg [197B]
Hit http://ppa.launchpad.net lucid Release.gpg
Hit http://ppa.launchpad.net lucid Release.gpg
Hit http://ppa.launchpad.net lucid Release.gpg
Hit http://security.ubuntu.com lucid-security Release
Hit http://badgerports.org lucid Release.gpg
Hit http://archive.canonical.com lucid Release
Hit http://ppa.launchpad.net lucid Release.gpg
Hit http://ppa.launchpad.net maverick Release.gpg
Hit http://ppa.launchpad.net lucid Release.gpg
Hit http://ppa.launchpad.net lucid Release.gpg
Hit http://ppa.launchpad.net lucid Release.gpg
Get:2 http://dl.google.com stable Release [1347B]
Hit http://security.ubuntu.com lucid-security/main Packages
Hit http://ppa.launchpad.net lucid Release
Hit http://ppa.launchpad.net lucid Release
Hit http://packages.medibuntu.org lucid Release
Hit http://download.virtualbox.org lucid Release.gpg
Hit http://archive.canonical.com lucid Release
Hit http://linux.dropbox.com lucid Release.gpg
Get:3 http://dl.google.com stable/main Packages [1110B]
Hit http://security.ubuntu.com lucid-security/restricted Packages
Hit http://security.ubuntu.com lucid-security/main Sources
Hit http://security.ubuntu.com lucid-security/restricted Sources
Hit http://security.ubuntu.com lucid-security/universe Packages
Hit http://security.ubuntu.com lucid-security/universe Sources
Hit http://ppa.launchpad.net lucid Release
Hit http://ppa.launchpad.net lucid Release
Hit http://ppa.launchpad.net maverick Release
Hit http://ppa.launchpad.net lucid Release
Hit http://ppa.launchpad.net lucid Release
Hit http://badgerports.org lucid Release
Hit http://archive.canonical.com lucid/partner Packages
Hit http://security.ubuntu.com lucid-security/multiverse Packages
Hit http://security.ubuntu.com lucid-security/multiverse Sources
Hit http://ppa.launchpad.net lucid Release
Hit http://packages.medibuntu.org lucid/free Packages
Hit http://download.virtualbox.org lucid Release
Hit http://es.archive.ubuntu.com lucid Release.gpg
Hit http://linux.dropbox.com lucid Release
Hit http://archive.canonical.com lucid/partner Packages
Hit http://ppa.launchpad.net lucid/main Packages
Hit http://ppa.launchpad.net lucid/main Packages
Hit http://es.archive.ubuntu.com lucid-updates Release.gpg
Hit http://badgerports.org lucid/main Packages
Hit http://ppa.launchpad.net lucid/main Packages
Hit http://ppa.launchpad.net lucid/main Packages
Hit http://ppa.launchpad.net maverick/main Packages
Hit http://ppa.launchpad.net lucid/main Packages
Hit http://ppa.launchpad.net lucid/main Packages
Hit http://packages.medibuntu.org lucid/non-free Packages
Hit http://linux.dropbox.com lucid/main Packages
Hit http://es.archive.ubuntu.com lucid Release
Hit http://download.virtualbox.org lucid/contrib Packages
Hit http://ppa.launchpad.net lucid/main Packages
Hit http://es.archive.ubuntu.com lucid-updates Release
Hit http://es.archive.ubuntu.com lucid/main Packages
Hit http://es.archive.ubuntu.com lucid/restricted Packages
Hit http://es.archive.ubuntu.com lucid/main Sources
Hit http://es.archive.ubuntu.com lucid/restricted Sources
Hit http://es.archive.ubuntu.com lucid/universe Packages
Hit http://es.archive.ubuntu.com lucid/universe Sources
Hit http://es.archive.ubuntu.com lucid/multiverse Packages
Hit http://es.archive.ubuntu.com lucid/multiverse Sources
Hit http://es.archive.ubuntu.com lucid-updates/main Packages
Hit http://es.archive.ubuntu.com lucid-updates/restricted Packages
Hit http://es.archive.ubuntu.com lucid-updates/main Sources
Hit http://es.archive.ubuntu.com lucid-updates/restricted Sources
Hit http://es.archive.ubuntu.com lucid-updates/universe Packages
Hit http://es.archive.ubuntu.com lucid-updates/universe Sources
Hit http://es.archive.ubuntu.com lucid-updates/multiverse Packages
Hit http://es.archive.ubuntu.com lucid-updates/multiverse Sources
Fetched 2654B in 1s (1628B/s)
Reading package lists...
Reading package lists...
Building dependency tree...
Reading state information...
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

Мои ошибки приходят из журнала работы cron, отправленного мне по почте. Я бегу 10.04, так же, как вы. Странно ..
djeikyb

Должен быть какой-то файл конфигурации cron, устанавливающий ограничительный PATH ... У меня сейчас нет проблем.
Лури
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.