Estou tentando usar o cron para automatizar minhas atualizações do sistema. Você pode ver meu crontab, comandos e erros resultantes abaixo.
Quando executo upgrades.sh como root, o script funciona bem. Quando o cron o executa, apt-get -y update
não executa nenhum problema, mas aptitude -y safe-upgrade
falha. Estou supondo este erro: debconf: (This frontend requires a controlling tty.)
é porque há uma atualização do kernel que, por sua vez, atualiza o grub, o que exige que eu explique dizendo que não há problema em substituir /boot/grub/menu.lst
. Mas eu não entendo os erros de caminho. E gostaria das atualizações que não exigem minha supervisão.
Eu li essa pergunta e ainda é uma solução inaceitável deunattended-upgrades
, e posso acabar usando, mas por que não consigo usar o cron? Parece que deve ser realmente simples e mais 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
Erros
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=...
um arquivo, por exemplo~/.env
, e obtê-lo de todos os scripts que você escreve usando. ~/.env
próximo à parte superior do script. Então, se você alterar,PATH
precisará editar apenas um arquivo. 2) Se você o inserircrontab
, significa que você não precisa editar todos os seus scripts cron, mas você terá dois locais para editar se quiser alterar o seuPATH
(por exemplo,~/.bashrc
ecrontab
). Qual é o melhor depende de você.cron
código-fonte dizem o que é. Em teoria, poderia ter sido forçar um ambiente consistente para que você pudesse copiar um crontab de um usuário para outro, mas apenasPATH
ser alterado, de modo que esse não pode ser o motivo.Embora seu principal problema já tenha sido respondido, parece que você está recebendo avisos do debconf porque está executando o apt-get sem um tty interativo. Para se livrar dessas mensagens, você pode definir esta variável de ambiente:
fonte
Existe uma página wiki da comunidade: Motivo pelo qual o crontab não funciona . Nesse caso, parece que a causa são as variáveis de ambiente limitadas do cron. Você pode executar isso a partir de um script de shell no /etc/cron.daily?
fonte
De CronHowto :
Mas, de fato, tudo parece estar bem, fazendo o mesmo que você ... De onde você buscou esses erros?
CRONTAB:
ROTEIRO:
REGISTRO:
fonte