¿Por qué falla apt-get cuando se automatiza con cron?

15

Estoy tratando de usar cron para automatizar las actualizaciones de mi sistema. Puede ver mi crontab, comandos y errores resultantes a continuación.

Cuando ejecuto upgrades.sh como root, el script funciona bien. Cuando cron lo ejecuta, apt-get -y updateno funciona, pero aptitude -y safe-upgradefalla. Supongo que este error: debconf: (This frontend requires a controlling tty.)es porque hay una actualización del kernel que a su vez actualiza grub, lo que requiere que explícitamente diga que está bien sobrescribir /boot/grub/menu.lst. Pero no entiendo los errores de ruta. Y me gustaría recibir las actualizaciones que no requieren mi supervisión.

He leído esta pregunta y todavía es una solución no aceptadaunattended-upgrades , y puedo terminar usándola, pero ¿por qué no puedo usar cron? Parece que debería ser realmente simple y más 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

Errores

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
fuente

Respuestas:

10

Los mensajes le dicen que su PATHvariable de entorno es incorrecta.

Intenta agregar

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

a la cima de tu crontab.

O podría poner la misma PATHlínea que la segunda línea de ~/bin/upgrades.sh. De esa manera, su prueba desde la línea de comando y su prueba desde crontabdebería producir los mismos resultados.

Mikel
fuente
Veo. Puse el comando en un script pensando erróneamente que la línea #! / Bin / bash cargaría la ruta normal de root. Obviamente me equivoqué. Entonces, ¿qué determina la ruta predeterminada de un usuario en primer lugar y cómo se aplica?
djeikyb
¿Por qué cron no toma el camino del usuario? ¿Es mejor agregar una ruta a crontab o mi script? ¿Hay desventajas?
djeikyb
Se supone que es por razones de seguridad, pero estoy de acuerdo, es molesto. 1) Si lo coloca en su secuencia de comandos, puede colocarlo PATH=...en un archivo, por ejemplo ~/.env, y obtenerlo de cada secuencia de comandos que escriba usando . ~/.envcerca de la parte superior de la secuencia de comandos. Luego, si cambia su PATHsolo tiene que editar un archivo. 2) Si lo coloca crontab, significa que no tiene que editar todos sus scripts cron, pero tendrá dos lugares para editar si desea cambiar su PATH(por ejemplo, ~/.bashrcy crontab). Lo que es mejor depende de ti.
Mikel
Frio. Creo que mi pregunta es, ¿por qué es inseguro? Estoy buscando en Google ahora mismo, pero todavía no se me ocurrió nada. De todos modos, he realizado los cambios, y marcaré como respondida mañana por la mañana cuando se ejecute, en caso de que algo más salga mal.
djeikyb
Ojalá lo supiera también. Si hay una razón, ni la documentación ni el croncódigo fuente dicen qué es. En teoría, podría haber sido forzar un entorno consistente para que pudiera copiar un crontab de un usuario a otro, pero solo PATHse cambia, por lo que esa no puede ser la razón.
Mikel
14

Aunque su problema principal ya ha sido respondido, parece que está recibiendo advertencias de debconf porque está ejecutando apt-get sin un tty interactivo. Para deshacerse de estos mensajes, puede configurar esta variable de entorno:

DEBIAN_FRONTEND=noninteractive
TrinitronX
fuente
1

Hay una página wiki de la comunidad: Razón por la cual crontab no funciona . En este caso, parece que la causa son las variables de entorno limitadas de cron. ¿Puedes ejecutar esto desde un script de shell en /etc/cron.daily?

Comunidad
fuente
Entendió mal su respuesta, así que no hay nada que comentar.
luri
0

De CronHowto :

Dependiendo de los comandos que se ejecuten, es posible que deba expandir la variable PATH de los usuarios raíz colocando la siguiente línea en la parte superior de su archivo crontab:

RUTA = / usr / sbin: / usr / bin: / sbin: / bin

Pero, de hecho, todo parece estar bien haciendo lo mismo que tú ... ¿De dónde sacaste esos errores?

CRONTAB:

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

GUIÓN:

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

INICIAR SESIÓN:

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
fuente
Mis errores provienen del registro de trabajos cron que se me envió por correo. Estoy ejecutando 10.04, igual que tú. Extraño ..
djeikyb
Debe haber algún archivo de configuración cron que establezca una RUTA restrictiva ... No estoy teniendo problemas en este momento.
luri