Cron executa meu script, mas o script não faz nada, algo a ver com o erro de e-mail ??? “Tem status 0x004b # 012” [duplicado]

3

Eu tenho um problema seriamente estranho com um dos servidores web Ubuntu 10.10 que eu administro.

Eu escrevi um script usando ruby e rake para executar alguns comandos tar e fazer um mysqldump dos bancos de dados. Eu instalei uma entrada no crontab de usuários root assim:

0 0,12 * * * /bin/bash -l -c 'cd /my/script/path && rake backup:everything'

Isso está funcionando perfeitamente em um dos servidores. No entanto, por outro lado, isso não parece realmente executar o que está no meu script.

Eu sei que está sendo chamado definitivamente porque quando eu corro

grep CRON /var/log/syslog

retorna:

Mar 22 12:00:01 ServerName CRON[10273]: (root) CMD (/bin/bash -l -c 'cd /my/script/path && rake backup:everything')

No entanto, definitivamente não está fazendo o que está nesse script.

Quando eu executo diretamente o script assim:

cd /my/script/path && sudo rake backup:everything

Funciona perfeitamente.

Também fiz isso no crontab dos dois servidores:

0 0,12 * * * /bin/bash -l -c 'cd /my/script/path && rake backup:everything >> output.txt'

(como no script eu estou fazendo um "puts 'backup x pasta'" de vez em quando)

No servidor em que a tarefa cron está funcionando, ele cria o arquivo output.txt e coloca a saída esperada lá, como "Iniciando backup", etc.

No entanto, no servidor em que não está funcionando, ele apenas cria o arquivo, mas o deixa vazio. Mas quando eu copiar o comando do syslog novamente e executá-lo manualmente:

sudo /bin/bash -l -c 'cd /my/script/path && rake backup:everything >> output.txt'

Funciona bem e a saída é conforme o esperado.

Eu posso estar agarrado a palha agora, mas poderia ser qualquer coisa com isso:

CRON[10271]: (root) MAIL (mailed 55 bytes of output but got status 0x004b#012)

Isto aparece no syslog após todas as chamadas cron. Eu realmente só tenho esse cron job e outro pequeno para atualizar o relógio do sistema, mas pela aparência dele nenhum deles está funcionando corretamente.

Uma configuração de correio incorreta está matando meus trabalhos do cron? Isso é possível?

    
por Daniel Upton 22.03.2011 / 15:40

2 respostas

5

Você deve fornecer o caminho completo para rake na linha cron. Algo como:

/sbin/rake ou onde quer que ele realmente esteja.

Se o caminho que o rake reside não estiver no caminho do usuário raiz, ele não poderá ser executado.

Se for e-mail, você deverá ver algo no log de mensagens. Verifique lá.

    
por 22.03.2011 / 16:20
3

Ao lidar com o cron, considere sempre as variáveis de ambiente. É melhor executar o script bash, que importa as variáveis de ambiente (fonte) e executar o seu comando.

    
por 22.03.2011 / 16:12