tldr; Não assuma qualquer variáveis de ambiente em cron
(incluindo PATH
).
Depois de alguns dias, percebi que sou um idiota e coloquei 2>&1
no lugar errado. Depois de colocá-lo após o nome do arquivo de log, ele me deu os erros que causaram o meu problema:
dpkg: warning: 'ldconfig' not found in PATH or not executable
dpkg: warning: 'start-stop-daemon' not found in PATH or not executable
dpkg: error: 2 expected programs not found in PATH or not executable
Note: root's PATH should usually contain /usr/local/sbin, /usr/sbin and /sbin
Com essa nova informação, finalmente encontrei outro post com o mesmo problema . Acontece que cron
tem variáveis de ambiente muito limitadas. Isso ocorreu devido a ataques antigos em cron
que se aproveitam das referidas variáveis. Isso significa que a variável PATH
nunca é carregada (indicada no erro acima) e, portanto, alguns comandos dos quais o apt-get upgrade
depende não puderam ser executados. Isso pode ser corrigido configurando PATH
manualmente em cron
.
Há também alguns outros erros sobre o fato de que debconf
precisa de um controle tty. Isso não impede que o comando seja executado, mas eles podem ser suprimidos configurando a variável de ambiente DEBIAN_FRONTEND
em cron
.
Aqui está em toda a sua glória:
PATH=/usr/bin:/bin:/usr/sbin:/sbin
DEBIAN_FRONTEND=noninteractive
@daily apt-get -y upgrade > /var/log/tmp.log 2>&1