질문/조언질답게시판
Extra Form
PHP PHP 7.2
CMS Rhymix

동봉된 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. 무작위로 파일이 실행되는 것을 방지하기 위해 상단에 저희 서버 아이피만 동작되도록 코드를 추가할 생각입니다.

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

  • profile
    그렇게 하시지마시고 클론탭에 한줄만 바꾸시면 되는데요 ㅠㅠ
  • profile profile
    기존에 제가 계속 여쭤봤는데 별다른 답이 없으셔서 이렇게 해봤습니다. ㅜㅡ
  • profile

    https://github.com/bjrambo/experience/blob/master/crontab.php#L17

    해당줄

    $oExperienceController = getController('experience');

     

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

     

  • profile profile

    말씀하신대로 고쳐서

    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
     

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

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

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

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

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

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

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

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

     

    해결은 했습니다.