Por que apenas um comando wget está funcionando no meu crontab?

15

Desejo buscar o conteúdo de um script PHP no meu servidor duas vezes por dia, alterando uma variável de consulta langpara definir o idioma que queremos e salvar esse conteúdo em dois arquivos específicos do idioma. Este é o meu crontab:

*/15 * * * * ~root/apache.sh > /var/log/checkapache.log
10 0 * * * wget -O /path/to/file-sv.sql "http://mydomain.com/path/?lang=sv"
11 0 * * * wget -O /path/to/file-en.sql "http://mydomain.com/path/?lang=en"

O problema é que apenas a primeira linha de comando do wget está sendo executada (ou para ser mais preciso: o único arquivo que está sendo gravado é /path/to/file-sv.sql). Se eu alternar a segunda e a terceira linha, /path/to/file-en.sqlserá gravada. A primeira linha sempre é executada conforme o esperado, não importa onde esteja.

Eu tentei usar lynx -dump "http://mydomain.com/path/?lang=xx" > /path/to/file-xx.sqlsem sucesso; ainda apenas a primeira linha do lince foi executada com sucesso. Mesmo misturar wget e lynx não mudou isso!

Ficando meio desesperado! Estou esquecendo de algo? Existem milhares de artigos sobre o crontab (combinado com) wget ou lynx, mas tudo parece cobrir configurações e sintaxe básicas. Alguém tem idéia do que estou fazendo de errado?

Obrigado
Alexander

Alexander Wallin
fonte
Você tem certeza de que sempre que acessar mydomain.com/path/?lang=en, alguma coisa será retornada? você já tentou isso em uma linha de comando para ver o que acontece (wget -O - meudominio.com/caminho/?lang=pt )?
Torian
1
Gostaria de tentar apagar e recriar o retorno de carro entre 2 e 3.
Antonius Bloch
A melhor prática é especificar o caminho completo para os executáveis ​​no crontab. Como: "/ usr / bin / wget". Eu não acho que isso ajudaria no seu caso, uma vez que um dos crons funciona.
Antonius Bloch
O que é exibido no log do cron quando isso acontece?
beans
@Torian: Funciona como um encanto.
Alexander Wallin

Respostas:

42

Tente adicionar nova linha no final do seu crontab.

gelraen
fonte
1
Você é uma dádiva de Deus! Isso foi feito! Eu votaria em você se tivesse reputação. :)
Alexander Wallin 02/02
1
@gelraen Mas ... por quê?
Samuel
2

Há algo errado no texto. Edite seu crontab no vim e mostre caracteres invisíveis.

:set invlist

Você deve poder ver e corrigi-lo.

bahamat
fonte
Errado como? Como eu o edito no Vim? Tentei reescrever o arquivo inteiro no caso em que copiar e colar causaria problemas.
Alexander Wallin
@afEkenholm: como você o edita agora?
bahamat 02/02
1
@bahamat:# crontab -e
Alexander Wallin
@afEkenholm: do this:EDITOR=vim crontab -e
bahamat
@bahamat: Tudo parece bem. Tem um roxo $no final de cada linha?
Alexander Wallin
1

Tente adicionar redirecionamento, para depurar o crontab (ou ler o correio raiz):

11 0 * * * wget -O /path/to/file-en.sql "http://mydomain.com/path/?lang=en" > /tmp/crontab_ouptput 2> /tmp/crontab_error

Execute também 'wget -O /path/to/file-en.sql " http://mydomain.com/path/?lang=en "' no console.

Também use 'crontab -e' para validar o novo crontab.

Além disso, tente excluir a linha que não está funcionando e digite-a novamente no teclado.

Faça o backup da corntab e execute o comando:

crontab -l | crontab -
alvosu
fonte
Adicionar /tmp/crontab_ouptput 2> /tmp/crontab_errorapenas funciona para a primeira linha. A execução do comando no console funciona perfeitamente. Reescreva o arquivo inteiro com minhas próprias mãos, mas nada mudou.
Alexander Wallin
Faça backup do crontab e tente: crontab -l | crontab -
alvosu
Obrigado pelos esforços, @alvosu, mas uma nova linha simples fez o truque!
Alexander Wallin 02/02
1

Passei algum tempo tentando as respostas acima (adicionando novas linhas, excluindo novas linhas etc.) em um sistema executando cronie . Finalmente encontrado, existe um erro no cronie 1.5.3 que executa apenas o primeiro trabalho do cron para cada usuário . Foi corrigido na 1.5.4

https://github.com/cronie-crond/cronie/issues/30

Espero que isso economize alguém algum tempo ...

Jeroen
fonte