2010-03-31 3 views
1

나는 bash에서 curl로 html 파일을 다운로드하려고합니다. 이 사이트처럼 : http://www.registrar.ucla.edu/schedule/detselect.aspx?termsel=10S&subareasel=PHYSICS&idxcrs=0001B+++curl : 동적 URL에서 다운로드

수동으로 다운로드하면 정상적으로 작동합니다. 그러나, 나는 crontab을 통해 스크립트를 실행하려고 할 때 출력 HTML 파일이 매우 작으며 "Object moved to this"라고 말합니다. 깨진 링크가 있습니다. 이것은 crontab 명령이 실행하는 희소 한 환경과 관련이 있습니까? 나는이 질문에 발견

php ssl curl : object moved error

을하지만 난, PHP는 bash는하지 사용하고 있습니다. bash에서이 문제를 해결하기 위해 설정할 수있는 동일한 명령 행 옵션이나 변수는 무엇입니까?

(I wget을하지, 컬이 작업을 수행 할)

편집 : 물론, 때때로 (대화 형 쉘을 통해) 수동으로 파일 작동을 다운로드하지만, 가끔은 (난 아직도하지 않는 것은 "이동 된 개체 여기 "메시지). 따라서 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 

편집 : 문제 해결. 문제는 URL의 이탈 태그였습니다. 내가 sed s,"<URL>",\""$url"\", template.txt > test.sh 스크립트를 생성하고 있었기 때문에 sed는 &의 모든 인스턴스를 정규식 <URL>으로 대체했기 때문입니다. URL을 수정 한 후 말풍선이 잘 작동합니다.

답변

2

300 시리즈 리디렉션을 따르는 -L 또는 --location 옵션이 필요합니다. --maxredirs [n]은 컬을 n 리디렉션으로 제한합니다.

대화 형 셸에서 작동하는 것이 궁금합니다. 동일한 URL을 가져 오는 중입니까? 당신은 항상 당신의 cron 항목에서 환경 스크립트를 소싱 시도 할 수 :

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

편집 : 예제 URL 스크립트에서보다 다소 다르다. 스크립트의 $url에는 <URL> 태그의 추가 쌍이 있습니다. 그것들을 &으로 바꾸면, 기존의 인수 분리자인 GET 요청이 저에게 효과적입니다.

+0

-L 옵션을 사용하면 도움이되지만 해결되지 않습니다. "Object moved here"메시지가 없지만 다운로드 한 페이지에는 원하는 페이지 대신 "시스템을 현재 사용할 수 없거나 오프라인 상태입니다."라는 오류 메시지가 있습니다. – anoda9

+0

예, 동일한 URL로 테스트했습니다. .bashrc 파일이 없습니다. 환경 스크립트를 소싱하면 도움이 될지 모르겠지만 .. – anoda9

+0

좋은 캐치, 다소 다릅니다.나는 sed를 사용하여 url을 스크립트로 대체했으며 대체 필드에서 '&'문자의 동작을 알지 못했습니다. 감사. – anoda9

0

스크립트를 보지 않고도 정확히 무슨 일이 일어 났는지 추측하기는 어렵지만 추측 할 때 환경 문제 일 가능성이 큽니다.

스크립트에서 실행 파일과 파일의 전체 경로를 지정하는 것이 좋습니다.

스크립트 및 crontab 항목을 표시하면 더 많은 도움이 될 수 있습니다.