Pourquoi apt-get échoue-t-il lorsqu'il est automatisé avec cron?

15

J'essaie d'utiliser cron pour automatiser les mises à jour de mon système. Vous pouvez voir mon crontab, mes commandes et les erreurs qui en résultent ci-dessous.

Lorsque j'exécute upgradees.sh en tant que root, le script fonctionne correctement. Lorsque cron l'exécute, apt-get -y updatene pose aucun problème, mais aptitude -y safe-upgradeéchoue. Je devine cette erreur: debconf: (This frontend requires a controlling tty.)c'est parce qu'il y a une mise à jour du noyau qui à son tour met à jour grub, ce qui nécessite que je dise explicitement que c'est correct d'écraser /boot/grub/menu.lst. Mais je ne comprends pas les erreurs de chemin. Et j'aimerais que les mises à jour ne nécessitent pas ma supervision.

J'ai lu cette question et c'est une solution encore non acceptée deunattended-upgrades , et je peux finir par l'utiliser, mais pourquoi ne puis-je pas utiliser cron? On dirait que ça devrait être vraiment simple, et plus 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

les erreurs

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...
djeikyb
la source

Réponses:

10

Les messages vous indiquent que votre PATHvariable d'environnement est incorrecte.

Essayez d'ajouter

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

au sommet de votre crontab.

Ou vous pouvez mettre la même PATHligne que la deuxième ligne de ~/bin/upgrades.sh. De cette façon, votre test depuis la ligne de commande et votre test depuis crontabdevraient produire les mêmes résultats.

Mikel
la source
Je vois. J'ai mis la commande dans un script pensant à tort que la ligne #! / Bin / bash chargerait le chemin normal de root. De toute évidence, j'avais tort. Alors, qu'est-ce qui détermine le chemin par défaut d'un utilisateur en premier lieu, et comment est-il appliqué?
djeikyb
Pourquoi cron ne prend-il pas le chemin de l'utilisateur? Est-il préférable d'ajouter un chemin vers crontab ou mon script? Y a-t-il des inconvénients?
djeikyb
C'est censé être pour des raisons de sécurité, mais je suis d'accord, c'est ennuyeux. 1) Si vous le mettez dans votre script, vous pouvez mettre PATH=...un fichier, par exemple ~/.env, et le source à partir de chaque script que vous écrivez en utilisant . ~/.envvers le haut du script. Ensuite, si vous changez votre, PATHvous n'avez qu'à modifier un fichier. 2) Si vous le mettez dedans crontab, cela signifie que vous n'avez pas à éditer tous vos scripts cron, mais vous aurez deux endroits à éditer si vous voulez changer votre PATH(par exemple ~/.bashrcet crontab). Ce qui est mieux dépend de vous.
Mikel
Cool. Je suppose que ma question est, pourquoi est-il précaire? Je google en ce moment, mais je n'ai encore rien trouvé. Quoi qu'il en soit, j'ai apporté les modifications, et je marquerai comme répondu demain matin quand il fonctionnera, au cas où quelque chose d'autre deviendrait chancelant.
djeikyb
J'aimerais bien le savoir aussi. S'il y a une raison, ni la documentation ni le croncode source ne disent de quoi il s'agit. En théorie, cela aurait pu être de forcer un environnement cohérent afin que vous puissiez copier une crontab d'un utilisateur à un autre, mais n'est PATHmodifié que si cela ne peut pas être la raison.
Mikel
14

Bien que votre problème principal ait déjà été résolu, il semble que vous receviez des avertissements debconf car vous exécutez apt-get sans tty interactif. Pour vous débarrasser de ces messages, vous pouvez définir cette variable d'environnement:

DEBIAN_FRONTEND=noninteractive
TrinitronX
la source
1

Il existe une page wiki communautaire: Raison pour laquelle crontab ne fonctionne pas . Dans ce cas, il semble que la cause soit les variables d'environnement limitées de cron. Pouvez-vous l'exécuter à partir d'un script shell dans /etc/cron.daily?

Communauté
la source
Vous avez mal compris votre réponse, donc rien à commenter.
luri
0

De CronHowto :

Selon les commandes en cours d'exécution, vous devrez peut-être étendre la variable PATH des utilisateurs root en plaçant la ligne suivante en haut de leur fichier crontab:

CHEMIN = / usr / sbin: / usr / bin: / sbin: / bin

Mais en fait, tout semble bien se passer comme vous ... D'où avez-vous récupéré ces erreurs?

CRONTAB:

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

SCÉNARIO:

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

JOURNAL:

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.
luri
la source
Mes erreurs proviennent du journal des tâches cron qui m'a été envoyé. Je cours 10.04, comme toi. Étrange ..
djeikyb
Il doit y avoir un fichier de configuration cron définissant un CHEMIN restrictif ... Je n'ai pas de problèmes pour le moment.
luri