Я пытаюсь использовать 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...
PATH=...
в файл, например~/.env
, и получить его из каждого скрипта, который вы используете,. ~/.env
в верхней части скрипта. Затем, если вы измените свой,PATH
вам нужно отредактировать только один файл. 2) Если вы вставите егоcrontab
, это означает, что вам не нужно редактировать все свои скрипты cron, но у вас будет два места для редактирования, если вы хотите изменить своиPATH
(например,~/.bashrc
иcrontab
). Что лучше, зависит от вас.cron
исходный код не говорят, что это такое. Теоретически это может быть принудительное создание согласованной среды, чтобы вы могли скопировать crontab от одного пользователя к другому, но это толькоPATH
изменилось, так что это не может быть причиной.Хотя ваша основная проблема уже решена, похоже, вы получаете предупреждения debconf, потому что вы запускаете apt-get без интерактивного tty. Чтобы избавиться от этих сообщений, вы можете установить эту переменную среды:
источник
Существует вики-страница сообщества: Причина, по которой crontab не работает . В этом случае кажется, что причиной являются ограниченные переменные окружения cron. Можете ли вы запустить это из сценария оболочки в /etc/cron.daily?
источник
Из CronHowto :
Но на самом деле все вроде бы так же, как и вы ... Откуда вы взяли эти ошибки?
CRONTAB:
СЦЕНАРИЙ:
ЖУРНАЛ:
источник