Pergunta

Estou tentando baixar um arquivo html com curl no bash.Curta este site:http://www.registrar.ucla.edu/schedule/detselect.aspx?termsel=10S&subareasel=PHYSICS&idxcrs=0001B+++

Quando faço o download manualmente, funciona bem.No entanto, quando tento executar meu script através do CRONTAB, o arquivo HTML de saída é muito pequeno e apenas diz "Objeto movido para aqui". com um link quebrado.Isso tem algo a ver com o ambiente esparso em que os comandos crontab o executam?Encontrei esta pergunta:

phpssl curl:erro de objeto movido

mas estou usando bash, não php.Quais são as opções ou variáveis ​​​​de linha de comando equivalentes a serem definidas para corrigir esse problema no bash?

(Eu quero fazer isso com curl, não com wget)

Editar:bem, às vezes o download do arquivo manualmente (via shell interativo) funciona, mas às vezes não (ainda recebo a mensagem "Objeto movido para cá").Portanto, pode não ser um problema específico com o ambiente do cron, mas com o próprio curl.

a entrada do cron:
* * * * * ~/.class/test.sh >> ~/.class/test_out 2>&1

teste.sh:

#! /bin/bash
PATH=/usr/local/bin:/usr/bin:/bin:/sbin
cd ~/.class

course="physics 1b"
url="http://www.registrar.ucla.edu/schedule/detselect.aspx?termsel=10S<URL>subareasel=PHYSICS<URL>idxcrs=0001B+++"

curl "$url" -sLo "$course".html  --max-redirs 5

Editar:Problema resolvido.O problema eram as tags perdidas no URL.Foi porque eu estava fazendo sed s,"<URL>",\""$url"\", template.txt > test.sh para gerar os scripts e sed substituiu todas as instâncias de & com a expressão regular <URL>.Depois de corrigir o URL, o curl funciona bem.

Foi útil?

Solução

Você quer o -L ou --location opção, que segue redirecionamentos da série 300. --maxredirs [n] limitará a ondulação a n redirecionamentos.

É curioso que isso funcione a partir de um shell interativo.Você está buscando o mesmo URL?Você sempre pode tentar obter os scripts do seu ambiente na sua entrada cron:

* * * * * . /home/you/.bashrc ; curl -L --maxredirs 5 ...

EDITAR: o URL do exemplo é um pouco diferente daquele do script. $url no script tem um par adicional de <URL> Tag.Substituindo-os por &, os separadores de argumentos convencionais para GET pedidos, funciona para mim.

Outras dicas

Sem ver o seu script, é difícil adivinhar exatamente o que está acontecendo, mas é provável que seja um problema ambiental, como você supõe.

Uma coisa que geralmente ajuda é especificar o caminho completo para executáveis ​​e arquivos em seu script.

Se você mostrar seu script e entrada do crontab, poderemos ajudar mais.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top