Por que o apt-get falha quando automatizado com cron?


15

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 updatenão executa nenhum problema, mas aptitude -y safe-upgradefalha. 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...

Respostas:


10

As mensagens estão informando que sua PATHvariável de ambiente está incorreta.

Tente adicionar

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

para o topo do seu crontab.

Ou você pode colocar a mesma PATHlinha que a segunda linha de ~/bin/upgrades.sh. Dessa forma, seu teste na linha de comando e seu teste crontabdevem produzir os mesmos resultados.


Entendo. Coloquei o comando em um script por engano, pensando que a linha #! / Bin / bash carregaria o caminho normal do root. Obviamente eu estava errado. Então, o que determina o caminho padrão de um usuário e como ele é aplicado?
precisa saber é o seguinte

Por que o cron não segue o caminho do usuário? É melhor adicionar o caminho ao crontab ou ao meu script? Existem desvantagens?
precisa saber é o seguinte

É suposto ser por razões de segurança, mas eu concordo, é irritante. 1) Se você colocá-lo em seu script, você pode colocar PATH=...um arquivo, por exemplo ~/.env, e obtê-lo de todos os scripts que você escreve usando . ~/.envpróximo à parte superior do script. Então, se você alterar, PATHprecisará editar apenas um arquivo. 2) Se você o inserir crontab, significa que você não precisa editar todos os seus scripts cron, mas você terá dois locais para editar se quiser alterar o seu PATH(por exemplo, ~/.bashrce crontab). Qual é o melhor depende de você.
Mikel

Legal. Acho que minha pergunta é: por que é inseguro? Estou pesquisando no Google agora, mas ainda não criei nada. De qualquer forma, eu fiz as alterações e marcarei como respondidas amanhã de manhã quando for executada, para o caso de algo mais parecer estranho.
precisa saber é o seguinte

Eu gostaria de saber também. Se houver um motivo, nem a documentação nem o croncó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 apenas PATHser alterado, de modo que esse não pode ser o motivo.
Mikel

14

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:

DEBIAN_FRONTEND=noninteractive

1

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?


Entendeu mal sua resposta, então nada a comentar.
quer

0

De CronHowto :

Dependendo dos comandos que estão sendo executados, pode ser necessário expandir a variável PATH dos usuários raiz, colocando a seguinte linha na parte superior do arquivo crontab:

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

Mas, de fato, tudo parece estar bem, fazendo o mesmo que você ... De onde você buscou esses erros?

CRONTAB:

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

ROTEIRO:

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

REGISTRO:

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.

Meus erros vêm do log de tarefas cron enviado para mim. Estou executando o 10.04, o mesmo que você. Estranho ..
djeikyb 29/01

Deve haver algum arquivo de configuração cron configurando um PATH restritivo ... Não estou tendo problemas no momento.
luri 29/01
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.