테스트 사이트 - 개발 중인 베타 버전입니다

카페24 크론탭 질문드립니다~ 채택완료

lacomparte 7년 전 조회 4,542

매주 월요일 새벽00:00에 

php 파일을 하나 실행하려고 하는데요..

 

찾아보니

크론탭이라는게 있던데..

https://crontab.guru" target="_blank">https://crontab.guru

 

여기서 

제가 원하는 소스

</p>

<p>&& curl -sm 30 k.wdt.io/<email-address>/<cronjob-name>?c=0_0_*_*_mon</p>

<p>

이걸 만들었습니다.

email-address 나 cronjob-name 이나 변경해야할것 같긴한데요;

 

 

문제는 이 소스를 어느 파일에 또 서버 어느위치에 넣느냐 인데..

도통 감이 안잡히네요-_-;;

 

 

하려는 작업은

매주 월요일 00:00 에 .php 파일 하나 실행하려고 합니다

전주 베스트회원을 뽑으려고 하거든요~

 

 

 

댓글을 작성하려면 로그인이 필요합니다.

답변 2개

채택된 답변
+20 포인트
7년 전

얘기하신  crontab.guru 를 잠깐 살펴보았지만 저 또한 잘 이해되지 않았습니다.

 

다른 웹 크론 사이트를 하나 소개해 드리겠습니다.

 

https://cron-job.org">https://cron-job.org

 

계정 등록 후,

[Cronjobs] > [Create cronbjob]

으로 실행시키고자 하는 파일의 URL 과 스케쥴을 등록해주면 됩니다.

 

베스트회원을 뽑는 파일이  a.php 라면..

URL - http://~/a.php">http://~/a.php

Schedule - Monday, 0시, 0분으로 등록해주면 됩니다.

 

 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 6개

l
lacomparte
7년 전
아.. 감사합니다ㅎㅎ

extend 폴더에 있는 파일을 실행하려고 하는데요.
도메인/extend/a.php
하면 되는건가요..!?

메인에서 a.php를 참조하는 스킨파일이 실행되는건 어떻게 막아야하죠!!??

읔..
마르스컴퍼니
7년 전
그렇습니다. 도메인/extend/a.php 와 같이 넣어주면 됩니다.

직접 브라우저 주소창에 붙여넣기 했을 때, 의도한 대로 실행된다면 유효한 URL 입니다.

크론에 의하지 않은 실행을 막는 방법은 여러가지가 있지만,
가장 간편한 방법중의 하나를 생각해 본다면,
URL 등록시 ~/extend/a.php?code=aabbccdd
와 같이 임의의 get 변수 처리형식으로 넣어준 후,
get 변수 값이 맞지 않으면 실행되지 않도록 처리해주는 방법이 있습니다.

그 외 referer 체크, Request 헤더 체크 등등 다양한 방법도 가능합니다.
l
lacomparte
7년 전
혹시 하나만 더 봐주실수 있나요...ㅎ
[code]
<?
if (!defined('_GNUBOARD_')) exit;

function get_best10_mb_list($write_row, $board, $skin_url, $subject_len=40) {

global $g5, $config;
global $qstr, $page;
global $name;

//$t = get_microtime();

// 배열전체를 복사
$list = $write_row;
unset($write_row);

$list_notice = array_map('trim', explode(',', $list['bo_notice']));
$list['is_notice'] = in_array($list['wr_id'], $list_notice);

if ($subject_len)
$list['subject'] = conv_subject($list['wr_subject'], $subject_len, '…');
else
$list['subject'] = conv_subject($list['wr_subject'], $list['bo_subject_len'], '…');

// 목록에서 내용 미리보기 사용한 게시판만 내용을 변환함 (속도 향상) : kkal3(커피)님께서 알려주셨습니다.
if ($list['bo_use_list_content'])
{
$html = 0;
if (strstr($list['wr_option'], 'html1'))
$html = 1;
else if (strstr($list['wr_option'], 'html2'))
$html = 2;

$list['content'] = conv_content($list['wr_content'], $html);
}

$list['comment_cnt'] = '';
if ($list['wr_comment'])
$list['comment_cnt'] = "<span class=\"cnt_cmt\">".$list['wr_comment']."</span>";

// 당일인 경우 시간으로 표시함
$list['datetime'] = substr($list['wr_datetime'],0,10);
$list['datetime2'] = $list['wr_datetime'];
if ($list['datetime'] == G5_TIME_YMD)
$list['datetime2'] = substr($list['datetime2'],11,5);
else
$list['datetime2'] = substr($list['datetime2'],5,5);
// 4.1
$list['last'] = substr($list['wr_last'],0,10);
$list['last2'] = $list['wr_last'];
if ($list['last'] == G5_TIME_YMD)
$list['last2'] = substr($list['last2'],11,5);
else
$list['last2'] = substr($list['last2'],5,5);

$list['wr_homepage'] = get_text($list['wr_homepage']);

$tmp_name = get_text(cut_str($list['wr_name'], $config['cf_cut_name'])); // 설정된 자리수 만큼만 이름 출력
$tmp_name2 = cut_str($list['wr_name'], $config['cf_cut_name']); // 설정된 자리수 만큼만 이름 출력

if ($board['bo_use_sideview'])
$list['name'] = get_sideview($list['mb_id'], $tmp_name2, $list['wr_email'], $list['wr_homepage'], $list['mb_nick']);
else
$list['name'] = '<span class="'.($list['mb_id']?'sv_member':'sv_guest').'">'.$tmp_name.'</span>';

$reply = $list['wr_reply'];

$list['reply'] = strlen($reply)*10;

$list['icon_reply'] = '';
if ($list['reply'])
$list['icon_reply'] = '<img src="'.$skin_url.'/img/icon_reply.gif" style="margin-left:'.$list['reply'].'px;" alt="답변글">';

$list['icon_link'] = '';
if ($list['wr_link1'] || $list['wr_link2'])
$list['icon_link'] = '<img src="'.$skin_url.'/img/icon_link.gif" alt="관련링크">';

// 가변 파일
if ($list['bo_use_list_file'] || ($list['wr_file'] && $subject_len == 255) /* view 인 경우 */) {
$list['file'] = get_file($list['bo_table'], $list['wr_id']);
} else {
$list['file']['count'] = $list['wr_file'];
}

if ($list['file']['count'])
$list['icon_file'] = '<img src="'.$skin_url.'/img/icon_file.gif" alt="첨부파일">';
// print_r ($board);

return $list;

}

function best_mb_group($skin_dir="", $rows=10, $best_mb_sort) {

global $g5;

$nowYmd = date("Y-m-d"); # 오늘시간을 구합니다.
$time = time();
$startYmd = date("Y-m-d",strtotime($day."-7day"));

if ($skin_dir) {
$latest_skin_path = G5_SKIN_PATH.'/latest/'.$skin_dir;
} else {
$latest_skin_path = G5_SKIN_PATH.'/latest/'.$skin_dir;
}

$list = array();
$sql = " SELECT * FROM {$g5['board_table']}";

$ress = sql_query($sql);

for($ii = 0; $board=sql_fetch_array($ress); $ii++){

$tmp_write_table = $g5['write_prefix'] . $board['bo_table']; # 게시판 테이블 전체이름

// 만약 메일을 활성화 시키고 싶으면 3번째 select 문에 wr_email 추가
if(empty($query))
{
$query = "SELECT temp4.mb_id, temp4.mb_nick AS wr_name, Total FROM ( SELECT mb_id, sum(Cnt) AS Total FROM ( SELECT * FROM ( SELECT mb_id, COUNT(*) AS Cnt FROM $tmp_write_table WHERE mb_id != 'admin' AND wr_datetime >= curdate() - INTERVAL DAYOFWEEK(curdate())+6 DAY AND wr_datetime < curdate() - INTERVAL DAYOFWEEK(curdate()) -1 DAY GROUP BY mb_id ";
}
// 만약 메일을 활성화 시키고 싶으면 3번째 select 문에 wr_email 추가
else
{
$query .= " UNION SELECT mb_id, COUNT(*) AS Cnt FROM $tmp_write_table WHERE mb_id != 'admin' AND mb_id != '' AND wr_datetime >= curdate() - INTERVAL DAYOFWEEK(curdate())+6 DAY AND wr_datetime < curdate() - INTERVAL DAYOFWEEK(curdate()) -1 DAY GROUP BY mb_id";
}

}

$query .= " ) AS TEMP ORDER BY temp.Cnt DESC ) AS temp2 GROUP BY temp2.mb_id) AS temp3 LEFT JOIN g5_member AS temp4 ON temp3.mb_id = temp4.mb_id ORDER BY Total DESC";
$link = $g5['connect_db'];
$result = @mysqli_query($link, $query);

//print_r ($query);

$board['bo_use_sideview'] = true;

for($i = 0; $row = sql_fetch_array($result); $i++){
$list[$i] = get_best10_mb_list($row, $board, $skin_dir, $wr_name);
}




ob_start();
include "$latest_skin_path/latest_mb.skin.php";
$content = ob_get_contents();
ob_end_clean();

return $content;
}

?>
[/code]

위 코드로 베스트맴버 구하려고 하는데요
크론탭에 등록한 파일도 이 파일이구요.
sql 문을 제가 작성하지 않아서
l
lacomparte
7년 전
제가 작성하지 않아서-_-;..
이거 생각보다 너무 복잡하네요 ㅠ
제작 의뢰라도 해야할까요 ;
마르스컴퍼니
7년 전
제가 얘기드린 부분은,

어떤 처리를 하는 파일을..

주기적으로 실행하기 위해,

웹호스팅 환경에서는 보통 리눅스의 크론을 직접 이용/사용하기는 어려운 경우가 많고..

그래서 웹 크론 사이트를 이용하는 방법이 있다는 소개 정도입니다.


베스트 회원을 구하는 파일의 정상작동 여부까지는..

소스도 길고.. 지금은 조금 어렵습니다.

해당 내용은 새로 질문을 올려보시는 게 어떨까 싶습니다.
l
lacomparte
7년 전
친절한 답변 감사드립니다 ㅋㅋ
크론탭에 대해서 복기하면서 구현해보겠습니다
감사합니다~

댓글을 작성하려면 로그인이 필요합니다.

베원
7년 전

저 같은 경우는 저 명령을 실행하는 php 파일을 만들어서 (system, exec 같은 함수 사용)

/var/www/html 폴더에 넣어두고

wget 으로 localhost에 있는 그 php 파일을 실행하도록 하는데

 

이게 사실 좋은 방법인지는 모르겠습니다 ㅎ

로그인 후 평가할 수 있습니다

답변에 대한 댓글 4개

l
lacomparte
7년 전
php 파일은 아무거나 실해이 안되는건가요?ㅠ
wget 에 대해서 또 찾아봐야겠네요;

찾아보니 wget 을 쓴다는걸 본것 같긴 합니다 ㅎ
베원
7년 전
@lacomparte 아무거나 실행한다는게 무슨 말인지 모르겠습니다.
l
lacomparte
7년 전
@베원 아..system,exec 같은 함수 말씀하셔서요
이게 정확히 어떤 함수를 말씀하시는지 몰라서 그랬습니다 ㅎ
베원
7년 전
@lacomparte 아뇨. system, exec 함수는 쉘 명령을 실행해주는 함수입니다. 권한만 있으면 어떤 명령이든 실행할 수 있어요. 쉘 명령이 실행 안 되면 www-data 유저의 권한을 체크해보세요.

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인