CI 묻고 답하기

제목 컨트롤러의 메서드를 crond로 실행할수있나요?
글쓴이 세콩 작성시각 2012/01/13 14:12:11
댓글 : 6 추천 : 0 스크랩 : 0 조회수 : 21022   RSS
RSS받아와서 DB로저장하는 컨트롤러를 만든후
자동화작업을 시도해볼까합니닷!!
(자동화작업 연결을 못시켜서 수동으로 url쳐서 RSS를 동기화하고있...................어...........요;;)


현재 "News" 라는 컨트롤러에 syncRSS() 라는 메서드를 수행하면
RSS를 받아와 신규정보일경우 DB로저장까지 하도록 구현해놓았습니닷..


나름 조사한답시고 cron 을 구글링한뒤
ex1) 2 * * * * lynx http://도메인.com/news/syncRSS
라고 crontab을 저장하고 재시작을 하고 결과를 보았더니 동작을 안하네요
(개념이 부족합니다 핰핰..)


아예 스크립트를 따로 만들어서  설정을 해야하는건지
구글링 + 삽질만 하다가 잠시 쉬러가기전.. 글을 남겨봅니다 ㅠㅠ
(맘같아서는 CI의 메서드만 어떻게 수행시키고 싶은데..)

ex2) 2 * * * * /usr/bin/php -q /var/www/프로젝트/syncRSS.php (이게맞는지는 모르겠네요..)

만약 ex2 가 맞다면 syncRSS 스크립트는 어떤식으로 구성해야할지..
염치 불구하고 조언 부탁드립니닷!! 도와주옵소서~~

↓ 컨트롤러 내용 혹시몰라서 첨부합니닷!!
class News extends CI_Controller {

 private $resource = array();
 private $items = array();

 function __construct() {
  parent::__construct();
  $this->spdev->setLanguage();
  $this->load->library('startup/layout');
 }

 function index() {
  $this->showList();
 }

 function showList() {
  
  // 모델로드
  $this->load->model('table/news_model');
  $data['news'] = $this->news_model->find_news();
  
  // 레이아웃
  $this->layout->view('news/article/newsList', $data);
  $this->layout->output();
 }

 /**
  * RSS받아온뒤 새로운소식인경우 DB로 저장!!
  */
 function syncRSS() {
  
  $url = array("http://www.onsuccess.me/?feed=rss2", "http://venturesquare.net/rss");
  $this->_recieveRSS($url);
  $this->_saveRSS();
 }
 /**
  * 해당 XML의 item들을 변수에 담아놓자!! ($this->items)
  * @param unknown_type $url
  */
 private function _recieveRSS($url) {

  // RSS를 받을 주소지부터 셋팅을 하고!!
  if(is_array($url)) $this->resource = array_merge($this->resource, $url);
  else $this->resource = $url;

  // 그다음엔 값을 받아와야겟지??
  $i = 0;
  foreach ($this->resource as $key => $url) {
   
   $xml[$key] = simplexml_load_file($url);
   
   // 받아온 XML중 item들만 가지고 있자!!
   foreach ($xml[$key]->channel->item as $val) {
    $this->items[$i++] = $val;
   }
  }
 }

 /**
  *  아이템들을 DB로저장!!
  */
 private function _saveRSS() {

  // 모델로드
  $this->load->model('table/news_model');
  
  // 정보저장
  foreach ($this->items as $item) {
   $row = array (
    'pub_date' => strftime("%Y-%m-%d %H:%M:%S", strtotime($item->pubDate)),
    'title' => ''.$item->title,
    'link' => ''.$item->link
   );
   
   $where = array('title' => ''.$item->title);
   if(!$this->news_model->get_news_count($where)) $this->news_model->add_news($row);
  }
 }
}



 다음글 브라우저 캐슁에 관련하여 질문입니다.ㅜㅜ (3)
 이전글 form validation 히스토리에 대해 질문이 있... (3)

댓글

타로 / 2012/01/13 14:34:35 / 추천 0
 CI는 CLI환경에서 실행가능하도록 설계되어 있습니다.

http://codeigniter-kr.org/user_guide_2.1.0/general/cli.html 

위 문서를 참고 하시면 됩니다. 문서 마지막 부분을 보세요.
세콩 / 2012/01/13 14:46:32 / 추천 0
 오오.......... 감사합니다

한줄기 빛을 보았습니다~~~~~~~ 유휴~~

ps)유저가이드를 더열심히 보겠습니다 ㅠ.ㅠ
타로 / 2012/01/13 15:57:48 / 추천 0
CI 접한지 이제 4일째이랍니다. ^^

저는 유저가이드 뿐 아니라 레퍼런스 서적일지라도 처음은 모조건 소설책 읽듯 읽는 습관을 가졌습니다. 끝까지 모두 읽기 전엔 참조하지 않습니다. 어떤 소스코드도 가져오지 않습니다. 준비되어 있지 않은 상태에서는 내 것으로 만들 수 없기 때문입니다.

이런 습관들은 잃는것 보다 얻는것이 더 큽니다. 제 경험이거든요. ^^ 각 항목을 꼼꼼히 보느니 차라리 편한 맘으로 한번쯤 쭈욱 읽어 보신다면 기필코 많은 도움이 되시리라 믿습니다.

외람된 잔소리였다면 사과드립니다. 늘 행복하세요.
세콩 / 2012/01/13 16:23:03 / 추천 0
잔소리라니요~!! 저~얼~때 아닙니닷

ps)아직 배울게 많은 학생이옵니다 이제곧 복학.. 뼈가되고 살이되는 조언 감사합니다~~


DJ구스 / 2012/01/13 23:14:50 / 추천 0
 cat  cron.close_games_by_autobot.sh 쉘스크립의 내용

 /usr/bin/php -q ~/html/index.php bo aru_bot close_running_games

CI는 없으면 개발 못하게 되어버린 CI앓이 DJ.구스..

ps. 개발자분 중 클럽 좋아하시는분?? 


<?php if (!defined('BASEPATH')) exit('No direct script access allowed');

class Aru_bot extends CI_Controller
{
 function __construct()
 {
  parent::__construct();
  //$this->output->enable_profiler(FALSE);
 }

 public function close_running_games()
 {
  if(TRUE === $this->input->is_cli_request())
  {
   $this->load->model('mod_game', '', TRUE);
   $this->mod_game->update_close_game_by_bot();
  }
 }

}
세콩 / 2012/01/14 15:57:43 / 추천 0
자세한 스크립트까지~~ 우왕굳ㅋ 감사합니다~~~~