Q&A

CMS/프레임워크 Rhymix 1.9
개발 언어 PHP 7.2

동봉된 crontab.php 파일이 라이믹스 2.0에서만 지원이 된다고 하셔서 새로 커스텀해서 만들어 보려고 합니다.

 

관리자가 메달동기화 하는 함수 자체를 옮겨 봤는데요.

 

https://github.com/bjrambo/experience/blob/master/experience.admin.controller.php#L179

 

여기 함수 전체를 corntab_custom.php 로 만들었습니다.

 

 

<?php
define('__XE__', true);
require_once('../../config/config.inc.php'); //XE config.inc.php 주소
$oContext = Context::getInstance();
$oContext->init();


@set_time_limit(0);

$config=getModel('experience')->getConfig();

$output = executeQuery('experience.deleteAllMedal');
debugPrint($output);

// 무조건 지난달.
$toMonthFirstDay = mktime(0, 0, 0, date("m"), 1, date("Y"));
$prev_month = strtotime("-1 month", $toMonthFirstDay);
$prevMonth = date('Ym', $prev_month);

/** @var experienceModel $oExperienceModel */
$oExperienceModel = getModel('experience');

$args = new stdClass();
$args->regdate = $prevMonth;
$args->exception_member = $config->exception_member;
$MonthOutput = executeQuery('experience.getMonthRank', $args);
$rankCount = 1;

foreach ($MonthOutput->data as $monthDatum)
{
$medalString = "없음";
if ($rankCount == intval($config->medal_diamond))
{
$medal = 'diamond';
$medalString = '다이아몬드';
}
elseif ($rankCount > intval($config->medal_diamond) && $rankCount <= intval($config->medal_platinum))
{
$medal = 'platinum';
$medalString = '플레티넘';
}
elseif ($rankCount > intval($config->medal_platinum) && $rankCount <= intval($config->medal_gold))
{
$medal = 'gold';
$medalString = '골드';
}
elseif ($rankCount > intval($config->medal_gold) && $rankCount <= intval($config->medal_silver))
{
$medal = 'silver';
$medalString = '실버';
}
elseif ($rankCount > intval($config->medal_silver) && $rankCount <= intval($config->medal_bronze))
{
$medal = 'bronze';
$medalString = '브론즈';
}

$args = new stdClass();
$args->member_srl = $monthDatum->member_srl;
$args->medal = $medal;
$args->update_regdate = $prevMonth;
$medas = $oExperienceModel->getMedalByMemberSrl($monthDatum->member_srl);
if ($medas)
{
$output = executeQuery('experience.updateMedal', $args);
}
else
{
$output = executeQuery('experience.insertMedal', $args);
}
$rankCount++;
//메달 흭득 알림(알림센터)
if (is_dir('../../modules/ncenterlite'))
{
$oNcenterliteController = getController('ncenterlite');

$body = new stdClass;
$body->medal = $medalString;

$args = new stdClass;
$args->member_srl = $monthDatum->member_srl;
$args->srl = 1;
$args->target_srl = 1;
$args->target_p_srl = 1;
$args->type = 'U';
$args->target_type = 'U';
$args->notify_type = $config->medal_update_ntype;
$args->target_body = serialize($body);
$args->target_url = getUrl('');
$args->regdate = date('YmdHis');
$args->notify = $oNcenterliteController->_getNotifyId($args);
$output = $oNcenterliteController->_insertNotify($args);
}
}
echo "Success";

 

 

위와 같이 작성해서 저 경로 파일을 서버에서 한번 실행하는 것으로 하려고 하는데

 

/usr/bin/curl -s "https://도메인경로/modules/experience/crontab.php" > /dev/null 2>&1

 

이런식으로 하면 저 파일이 제대로 동작을 하는 것을 확인했습니다.

 

제가 시도한 것 중 고쳐야 하거나 하는 부분이 있을지 문의 드립니다.

 

PS. 무작위로 파일이 실행되는 것을 방지하기 위해 상단에 저희 서버 아이피만 동작되도록 코드를 추가할 생각입니다.

- 알림센터 알림이 발생하기 때문에..

댓글 9

  • 그렇게 하시지마시고 클론탭에 한줄만 바꾸시면 되는데요 ㅠㅠ
  • @람보
    기존에 제가 계속 여쭤봤는데 별다른 답이 없으셔서 이렇게 해봤습니다. ㅜㅡ
  • https://github.com/bjrambo/experience/blob/master/crontab.php#L17

    해당줄

    $oExperienceController = getController('experience');

     

    으로 수정하셔서 해당 파일 로딩하세요.

     

  • @람보

    말씀하신대로 고쳐서

    php /var/www/html/modules/experience/crontab.php > /dev/null 2>&1

    이렇게 해봤는데 안되네요. 

     

    /usr/bin/curl -s "https://도메인/modules/experience/crontab.php" > /dev/null 2>&1
     

    이렇게 하면 됩니다.(단, 관리자 동기화에 있는 알림센터 기능은 빠져있죠.)

  • @웹지기
    음 왜그런지 모르겟찌만 서버설정의 문제인것으로 보여지네요.

    보통은 php 명령어로 잘 실행되거든요.ㅠ
  • @람보

    라이믹스 기본제공 스트립트는 잘 되거든요.

    파일안의 config.inc.php 경로가 없는 경로나 파일이라고 합니다.

  • @람보
    php로 실행안되는 것은 절대경로로 바꿔서 임시 조치 했습니다.
    require_once('/var/www/html/config/config.inc.php');

    이제 제가 만든 커스텀을 쓸건지 기본 제공하는 것을 쓸 건지 선택적으로 사용하면 될 것 같습니다.
    그런데 제가 만든 것에 오류가 있을지도 몰라서요 ㅎ
  • @웹지기
    실행하는 루트폴더의 문제일수도있습니다.
    cd /var/www/html && php ./modules~ 해보세요!
  • @거랴다얄

    실행하는 거는 해결했습니다. 지금 처럼 상대경로로 되어 있으면 경로 문제가 생겨서 절대경로로 해서 해결은 했습니다. 위에 댓글에 적었습니다. 실행 자체가 안되는게 아니고 실행하면서 안에 적힌 상대경로가 문제가 됩니다. config.inc.php 파일의 경로 문제..

     

    해결은 했습니다.