Чому apt-get виходить з ладу при автоматизованому застосуванні cron?


15

Я намагаюся використовувати cron для автоматизації оновлень системи. Нижче ви можете побачити мою crontab, команди та наслідки помилок.

Коли я запускаю upgrade.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? Здається, це повинно бути справді просто, і більш лінукс.

Кронтаб

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

upgrade.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, це означає, що вам не доведеться редагувати всі ваші крональні сценарії, але у вас буде два місця для редагування, якщо ви хочете змінити свої PATH(наприклад, ~/.bashrcі crontab). Що краще - саме від вас.
Мікель

Класно. Я здогадуюсь, моє питання: чому це небезпечно? Я зараз гуглю, але ще нічого не придумав. У будь-якому випадку я внесла зміни, і завтра вранці відзначу відповідь, коли вона пробіжить, на всякий випадок, якщо щось ще стане непростим.
djeikyb

Я б хотів, щоб і я знав. Якщо є причина, ні документація, ні cronвихідний код не кажуть, що це таке. Теоретично це могло б бути примусовим узгодженим середовищем, щоб ви могли копіювати кронтаб від одного користувача до іншого, але тільки PATHзмінювались, так що це не може бути причиною.
Мікель

14

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

DEBIAN_FRONTEND=noninteractive

1

Існує сторінка вікі спільноти: Причина, чому crontab не працює . У цьому випадку, здається, що причиною є обмежені змінні середовища cron. Чи можете ви запустити це зі скрипта оболонки в /etc/cron.daily?


Ви неправильно зрозуміли вашу відповідь, тому нічого не коментуйте.
luri

0

Від CronHowto :

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

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

Але насправді все, здається, добре робити так само, як і ви .... Звідки ви взяли ці помилки?

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.

Мої помилки йдуть із журналу роботи із клоном, який мені надсилають. Я бігаю 10.04, так само, як і ти. Дивно ..
djeikyb

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