Question

Je suis en train de télécharger un fichier html avec boucle en bash. Comme ce site: http://www.registrar.ucla.edu/ horaire / detselect.aspx? termsel = 10S & subareasel = & idxcrs = PHYSICS 0001B +++

Quand je le télécharger manuellement, il fonctionne très bien. Cependant, quand je tente de gérer mon script via crontab, le fichier html de sortie est très faible et dit que « Objet déplacé ici. » avec un lien cassé. Est-ce que cela a quelque chose à voir avec l'environnement clairsemé les commandes crontab exécuter? Je trouve cette question:

php boucle ssl: erreur objet déplacé

mais j'utilise bash, pas php. Quelles sont les options de ligne de commande équivalente ou variables à définir pour résoudre ce problème en bash?

(je veux le faire avec boucle, pas wget)

Edit: bien, parfois télécharger le fichier manuellement (via le shell interactif) fonctionne, mais parfois il n'a pas (je toujours le message « Objet déplacé ici »). Donc, il ne peut pas être un å spécifiquement un problème avec l'environnement Cron, mais avec boucle lui-même.

l'entrée 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

Edit: Problème résolu. La question était les balises parasites dans l'URL. C'était parce que je faisais sed s,"<URL>",\""$url"\", template.txt > test.sh pour générer les scripts et Sed remplacé toutes les instances de & avec le <URL> d'expression régulière. Après avoir fixé l'URL, boucle fonctionne très bien.

Était-ce utile?

La solution

Vous voulez que l'option -L ou --location, qui suit la série 300 réoriente. --maxredirs [n] limitera à boucle n réoriente.

Son curieux que cela fonctionne à partir d'un shell interactif. Est-ce que vous récupérez la même URL? Vous pouvez toujours essayer de sourcing vos scripts d'environnement dans votre entrée cron:

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

EDIT: l'url par exemple est un peu différent de celui dans le script. $url dans le script a une paire supplémentaire de balises <URL>. en les remplaçant par &, les seperators argument classique pour les demandes de GET, fonctionne pour moi.

Autres conseils

Sans voir votre script, il est difficile de deviner ce qui se passe exactement, mais il est probable que c'est un problème d'environnement que vous supposez.

Une chose qui aide souvent est de spécifier le chemin complet des fichiers exécutables et dans votre script.

Si vous montrez votre script et l'entrée crontab, nous pouvons être plus utile.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top