O que há de errado com minha configuração do cron.hourly?

6

A cada hora recebo um email com um erro como este,

Subject: Cron <root@supa> root    cd / && run-parts --report /etc/cron.hourly

/bin/sh: root: not found

O conteúdo do / etc / crontab é o seguinte, ou removo o usuário "root" ou não (6ª coluna), recebo o mesmo erro.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user  command
11 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#

Existem dois arquivos no meu diretório cron.hourly,

$ ll /etc/cron.hourly/
total 0
lrwxrwxrwx 1 root root 25 2009-10-29 09:24 ntpsync -> /home/<user>/bin/ntpsync
lrwxrwxrwx 1 root root 28 2009-10-23 10:33 foo -> /home/<user>/bin/foo

O primeiro script diz o seguinte,

$ cat ~/bin/ntpsync
#!/usr/bin/env bash
echo "user: $USER"
if [[ "$USER" == "root" ]] ; then
    ntpdate ntp.ubuntu.com
else
    sudo ntpdate ntp.ubuntu.com
fi

Mesmo eu removendo ambos os scripts no meu diretório /etc/cron.hourly/, ainda recebo o mesmo e-mail de erro a cada hora. Eu tentei reiniciar o cron e ainda recebo o mesmo email de erro. A próxima ideia que tenho é reiniciar, mas eu evitaria isso.

$ sudo /etc/init.d/cron restart

Minha versão do Ubuntu é a seguinte,

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=8.04
DISTRIB_CODENAME=hardy
DISTRIB_DESCRIPTION="Ubuntu 8.04.1"

Atualização: eu removi a sexta coluna "root" do meu arquivo / etc / crontab anteriormente porque quando eu pesquisei on-line alguém mencionou que poderia resolver o problema. Agora eu acho que o problema é que eu estava mexendo com a configuração do crontab do sistema ao invés da configuração da raiz.

$ sudo crontab -l
# m h  dom mon dow   command
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
    
por grokus 25.08.2010 / 21:28

5 respostas

6

O arquivo crontab padrão do pacote cron (3.0pl1-100ubuntu2.1, esta é a última versão do ubuntu 8.04), é assim:

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user  command
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

Você deve conseguir usar isso e colá-lo no arquivo, mas também pode querer ter certeza de que tem a versão mais recente do pacote. Você pode fazer isso fazendo:

apt-get update
apt-get install cron

Atualização:

Existem dois tipos diferentes de crontab: o crontab do sistema que está localizado em /etc/crontab . Este crontab tem esse fromat:

minute hour dayOfMonth month dayOfWeek userToRunAs restOfLineIsCommand

O outro tipo é o crontab dos usuários. Isso pode ser modificado usando o crontab . A configuração atual está localizada em /var/spool/cron/crontabs/USERNAME e é sempre executada como o usuário que a possui, e o tamanho do arquivo é:

minute hour dayOfMonth month dayOfWeek restOfLineIsCommand
    
por LassePoulsen 25.08.2010 / 22:57
1

Eu sei que você disse que ainda recebe os erros depois de remover a "raiz" na sexta coluna, mas realmente parece o problema.

Por exemplo, observe as outras linhas. Todos começam com "teste". Isso não é um usuário, esse é o começo de um comando. Remover a "raiz" faria seu comando começar com "cd".

Especialmente desde que a mensagem de erro diz que não é possível encontrar "root", que é o erro que você recebe quando tenta executar um programa que não existe.

Então, eu diria que tente remover isso novamente.

    
por Michael Terry 25.08.2010 / 22:25
1

Seu /etc/crontab parece engraçado de fato. Cada linha deve realmente ter uma coluna de usuário, que é a parte mais engraçada. Por exemplo, o meu lê:

# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the 'crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user  command
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#

A propósito, geralmente não é uma boa ideia tocar nesse arquivo. Se você precisar adicionar mais crontabs genéricos, use /etc/cron.d para isso. Você pode tentar restaurar o configuratino padrão para o pacote cron com:

$ sudo apt-get install --reinstall --yes -o DPkg::Options::=--force-confmiss -o DPkg::Options::=--force-confnew cron

e veja se isso resolve o problema.

    
por ℝaphink 25.08.2010 / 22:58
1

Existem duas questões em jogo aqui. Um (o mais óbvio) é a 6ª coluna imprópria no crontab pessoal do root. O segundo silencioso - é que o comando ever após a linha horária do cron em /etc/crontab não está sendo executado corretamente. As correções estão abaixo:

Você pode remover o arquivo crontab do usuário falso executando sudo crontab -r

Quando isso estiver concluído, você precisará adicionar o usuário root no arquivo /etc/crontab para cada linha após a linha cron do cronograma - assim:

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user  command
11 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#

Isso deve resolver esses problemas de e-mail.

    
por Marco Ceppi 25.08.2010 / 23:56
0

Faça:

# crontab -r

E NÃO faça isso :

# crontab /etc/crontab

Em vez disso, edita o arquivo / etc / crontab manualmente.

    
por user11267 22.02.2011 / 10:20