Domanda

Sto cercando di scaricare un file html con l'arricciatura in bash. Come nel sito: http://www.registrar.ucla.edu/ calendario / detselect.aspx? termsel = 10S & subareasel = FISICA & idxcrs = 0001B +++

Quando scarico manualmente, funziona benissimo. Tuttavia, quando provo e faccio funzionare il mio script attraverso crontab, il file HTML di output è molto piccolo e dice solo "Oggetto spostato qui." con un collegamento interrotto. Questo ha qualcosa a che fare con l'ambiente radi i comandi crontab eseguirlo? Ho trovato questa domanda:

php ricciolo SSL: oggetto spostato errore

, ma sto usando bash, non php. Quali sono le opzioni da riga di comando equivalente o variabili per impostare per risolvere questo problema in bash?

(che voglio fare questo con l'arricciatura, non wget)

Edit: bene, a volte il download manualmente (tramite shell interattiva) funziona, ma a volte non (ho ancora ottenere il "oggetto spostato qui" messaggio). Quindi non può essere un un specificamente essere un problema con l'ambiente di cron, ma con l'arricciatura stessa.

l'entrata cron:
    * * * * * ~/.class/test.sh >> ~/.class/test_out 2>&1

test.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

Modifica: Problema risolto. Il problema era che le tag randagi nell'URL. E 'stato perché stavo facendo sed s,"<URL>",\""$url"\", template.txt > test.sh per generare gli script e sed sostituito tutte le istanze di & con regolare <URL> espressione. Dopo aver fissato l'url, ricciolo funziona bene.

È stato utile?

Soluzione

Si desidera l'opzione -L o --location, che segue serie 300 reindirizza. --maxredirs [n] limiterà curl per n redirect.

Il suo curioso che questo funziona da una shell interattiva. Stai recuperano lo stesso URL? Si può sempre provare di sourcing vostri script di ambiente nel vostro ingresso cron:

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

Modifica l'esempio url è un po 'diverso da quello nello script. $url nello script ha una coppia aggiuntiva di tag <URL>. La loro sostituzione con &, i separatori di argomenti convenzionali per le richieste GET, funziona per me.

Altri suggerimenti

Senza vedere lo script è difficile indovinare che cosa sta succedendo, ma è probabile che si tratta di un problema ambientale, come si intuisce.

Una cosa che spesso aiuta è specificare il percorso completo eseguibili ei file nello script.

Se si mostra lo script e l'entrata crontab, possiamo essere di maggiore aiuto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top