2015년 8월 12일 수요일

[web2py] cron 사용하기

web2py의 cron 기능 사용하기!


라즈베리파이에서 web2py를 이용한 웹서버/DB서버를 만들고 DB에 값을 삽입/삭제/수정/확인 할 수 있는 페이지를 만든 다음, 별도의 python 프로그램에서 web2py로 만든 웹페이지 코드를 긁어와서 DB값을 읽어오게 하고 있었다.

이렇게 한 이유는,
web2py에 python 프로그램 코드를 그대로 넣어도(조금 수정을 해야겠지만) 코드가 동작하는데 해당 코드가 돌기 위해서는 결정적으로 코드가 작성된 웹페이지가 브라우저에서 호출이 한번은 되야 실행이 되기 때문이었다.

내가 만드는 python 프로그램은 웹페이지의 정보를 이용 하긴 하지만, 웹페이지가 호출되지 않아도 실행되어야했다.
그래서 프로그램과 web2py가 동일하게 python으로 작성됨에도 불구하고 별도로 개발하고 있었다.

하지만 web2py의 cron이라는 기능을 알게되어 python프로그램은 web2py로 합칠 수 있었다.
cron은 web2py가 실행되는 동안 주기적 또는 실행되는 최초에 원하는 Function또는 .py파일을 백그라운드에서 실행 시킬 수 있는 기능이다.

그 사용법은 다음과 같다.
(1) web2py가 설치된 폴더에 applications폴더가 있다. 거기에는 사용자가 만든 app폴더가 있고 그 폴더 안에 cron 폴더가 있다.
        ..../web2py/applications/[app name]/cron
cron폴더 안에는 crontab 이라는 파일이 있는데 이 파일에 백그라운드에서 실행시키고 싶은 Function또는 .py파일을 적어주면 된다.
        $sudo nano crontab

적어주는 양식 예제는 아래 링크에 있다.
http://web2py.com/books/default/chapter/29/04/the-core?search=Running+tasks+in+the+background#Cron

근데 예제에는 Function 경로를 어떻게 적어줘야하는지 설명이 부족해서 헤매다가 여러가지 해보고 알아냈다.
        @reboot  root *[Function이 위치한 controllers의 파일이름]/[Function 이름]
예를 들어 기본적으로 있는 controllers의 파일인 dafault.py의 index() 함수를 등록하려고 하면
        @reboot  root *default/index
라고 하면된다.
Function이 아닌 .py 파일을 등록하고 싶을때는 web2py 폴더에 있는 applications 폴더부터 경로를 적어주면 된다. .py 파일은 cron폴더 내에 작성하는 것이 기본인듯 하다.
        @reboot  root *applications/[app name]/cron/[파일명]

참고로 reboot은 web2py가 실행되는 최초에 한번만 수행된다는 뜻이다.

(2) crontab 파일을 변경하였으면 web2py를 실행할때 반드시 --run-cron 옵션을 달아줘야 한다.






댓글 없음:

댓글 쓰기