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 update
no funciona, pero aptitude -y safe-upgrade
falla. 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...
PATH=...
en un archivo, por ejemplo~/.env
, y obtenerlo de cada secuencia de comandos que escriba usando. ~/.env
cerca de la parte superior de la secuencia de comandos. Luego, si cambia suPATH
solo tiene que editar un archivo. 2) Si lo colocacrontab
, significa que no tiene que editar todos sus scripts cron, pero tendrá dos lugares para editar si desea cambiar suPATH
(por ejemplo,~/.bashrc
ycrontab
). Lo que es mejor depende de ti.cron
có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 soloPATH
se cambia, por lo que esa no puede ser la razón.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:
fuente
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?
fuente
De CronHowto :
Pero, de hecho, todo parece estar bien haciendo lo mismo que tú ... ¿De dónde sacaste esos errores?
CRONTAB:
GUIÓN:
INICIAR SESIÓN:
fuente