웹크롤러는 crontab으로 돌리는게 리소스 사용을 덜 먹을까요?

fantabean의 이미지

계속 영원히 지구 끝날때까지 혹은 제가 이제 됬다 싶을때까지 돌아야 할 웹크롤러를 하나 만들었습니다.
5분 주기로 계속 확인하는 방식인데 지금은 while True 걸고 코드상에서 time.sleep 호출해서
적당히 쉬도록 해놓았는데 코딩 마치고 터미널 종료하니 프로그램도 종료되는군요.

긁어보니 2가지 방법이 있는 것 같습니다.

1.
지금 코드 그대로 nohup 걸어서 계속 while 돌도록 한다.

2.
crontab 설정해서 리눅스가 주기적으로 실행시키게 한다. while True는 당연히 제거!

전자의 경우 초기 준비 과정이 한번이면 되고, 후자는 sleep 시간 동안 프로세스가 아예 죽어있는거니
양쪽 다 나름의 이득이 있는건데 어느 쪽이 좀 더 비싸게 치일지 모르겠습니다.

p.s
이런 리소스 사용 정도를 측정하는 방법이 있을까요?

송효진의 이미지

크롤러가 언제 끝날지 알 수 없으므로 크론탭은 좀 무리가 있는 것 같고,
nohup 하시되 죽었을 때 자동으로 살리고 싶으시다면 daemontools http://cr.yp.to/daemontools.html 추천합니다.

익명 사용자의 이미지

터미널 종료시 안죽게 하시려면 screen 을 쓰셔서 띄워두시면 될 것 같고요.

1번의 경우에는 얼마안되긴 하지만 프로그램이 계속 메모리에 상주해있잖아요 비효율적인 것 같아요. 저는 2를 애용합니다.

그리고 클론탭에 등록하실때 로그같은거 쉘스크립트로 간단하게 만들어서 실행한 시간같은거 로그에 기록하시면 될듯해요,.

jick의 이미지

글쎄요, 제 생각에는 crawler를 시작하면 기본적으로 읽어들여야 하는 데이터와 초기화 코드가 있을 테고, crontab으로 매번 재시작하면 시작할 때마다 이 초기화 코드를 실행해야 하니 메모리에 계속 띄워두는 게 더 효율적일 것 같은데요.

물론 서버에서 다른 프로그램이 같이 돌고 있고 메모리가 모자라다면 상황이 달라질 수도 있습니다만...
(아니면 코드를 비효율적으로 짜서 오래 돌리면 메모리가 점점 불어난다든지...)

익명 사용자의 이미지

관리측면을 볼때, 2번에 한표던집니다.!

단지 사족을 달자면, 다음과 같습니다.

** cron으로 실행시킬 프로그램에 대한 고찰 (소위, 5분주기에 대한 고찰)
cron은 특정 시간이 되면(crontab 파일에 조건에 따라) 해당 프로그램을 '무조건 재실행'하는 도구이다.
이때, 고려사항인 '중복 실행'에 대한 문제등은 응용프로그래머가 해결해야 합니다.

* 질문자 님의 응용프로그램인 '크롤러'가 5분 이내에 작업을 완수할 것인가?
- 크롤러는 동일 사이트를 크롤링한다고 할지라도, 매번, 종료주기를 예측할 수 없는 응용프로그램입니다.(크롤러 문제가 아니라, 발생가능한 외부요인 떄문인데, 외부요인이(웹사이트의 상태, 통신상태, 네트워크 랙등) 이 프로그램의 수행시간을 좌우하기 떄문입니다.)

* 크롤러의 실행전략에 대한 고려가 필요한데, 5분이 넘더라도 사이트 크롤링을 완결할 것인가? 아니면, 시간이 중요한 요인(5분)이므로 무조건 5분이면 새로 시작할 것인가?
- 시간이 중요한 경우 : 인위적으로 크롤러가 5분되면 종결조건으로 가도록 하드리얼타임 패턴으로 프로그램을 구성한다.
- 작업 완료가 중요한 경우 : 5분이 넘도록 작업중인 경우, 크롤러가 다시 크론에 의해 재실행되는 경우에 대한 처리가 필요합니다.(file lock, socket,... 등등, 재실행방지 방법론)
- 참고: 후자인 경우, CRON의 역할이 좀 에매해 지는데, 크론은 단지 프로그램 종료시 재실행 시키는 용도로 생각하고(주기적 재실행 시도), 응용프로그램은 재실행에 대한 방지만을 해놓고, 자체 스케쥴로 크롤링을 수행하는 방법도 있겠습니다.

* 위 조건이 만족된다면, nohub으로 실행되도록 cron에 올리시면 되겠습니다.

* 음 그런데, 나는 사람인데도 불구하고, CAPTCHA의 문자가 알아보기 어렵군요 --;

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.