마스터욱
Toggle navigation
  • 회원가입 | 정보찾기
ICON NAVIGATION
정보수정 쪽지함 주변맛집 익명채팅
공지사항 채팅 개발문의 방명록
  • MAIN NAVIGATION
  • 메인
  • 마스터욱 공간
    • 마스터욱 소개
    • 개발 리스트
    • 공지사항
    • 방명록
  • 마스터욱 외부자료
    • 네이버
    • 티스토리
    • 깃허브(github)
  • 개인 프로젝트
    • 랜덤 이성 채팅
    • Auto 크롤링
    • Javascript 카카오 채팅
    • 파이썬 뉴스매매
    • C# 키움 주식 자동매매
    • C# 키움 주식 패턴 분석
    • PHP 욱보드
    • 업비트 자동매매 개발
    • 업비트 자동매매 일지
  • 개발 의뢰
    • 개발 문의
    • 개발 견적
    • 개발 피드백
    • FAQ
  • 개발 경험 Tip
    • PHP
    • JSP
    • HTML
    • Javascript
    • Android
    • C#
    • MySQL
    • Linux
    • Python
    • NodeJS
    • React
    • Vue.js
    • Flutter
    • 정규식
    • 기타
  • 커뮤니티
    • 자유게시판
    • 추천사이트
    • 영화
    • 여행
    • 유머
    • Overseas News
  • 맛집&즐길 거리 탐방
    • 맛집 정보
    • 즐길 거리 정보
    • 내 주위 맛집&즐길 거리
  • 공유 사진
    • 음식
    • 여행
    • 캐릭터
    • 배경
    • 기타
    • 이모티콘
    • 일러스트
  • 놀이터
    • 블록뽀시기
    • 트레이딩뷰
    • 로또 시뮬레이션
    • 쳇쳇 익명 채팅
    • 랜덤 이성 채팅
    • AI 채팅
    • 미니 채팅
    • 바이너리 테스트
    • 마번호 생성기
    • 바카라 시뮬레이션
    • 홀짝점수 테스트
    • 로또 분석기
SITE STATISTICS
  • - 명 현재 접속자
  • 1,833 명 오늘 방문자
  • 2,310 명 어제 방문자
  • 5,192 명 최대 방문자
  • 687,406 명 전체 방문자
  • 2,569 개 전체 게시물
  • 496 개 전체 댓글수
Facebook Twitter GooglePlus KakaoStory NaverBand
  1. 홈
  2. 기타
목록으로

리눅스 Crontab(크론탭) 초단위로 실행하기 위한 꼼수 공개

마스터욱 1 236 0 0 2019-01-18 23:27:44

이번 프로젝트에서는 초단위로 시세 API 를 호출해서 DB에 시세 데이터를 넣어야 하는 일이 생겼습니다.

뭐 생각나는것이라곤 크론탭(Crontab) 밖에 없었습니다.

하지만 크론탭은 최소 분단위까지만 허용이 됩니다.

그래서 결국 데몬 프로그램을 만들수 밖에 없었습니다.

 

데몬 프로그램 소스코드는 대략 아래와 같습니다.

_cron_start.php

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
while(TRUE)
{
    $sql = "SELECT value FROM cb_config WHERE name = 'cron_start'";
    $result = mysql_query($sql);
    $cron_start = mysql_fetch_assoc($result);
    $cron_start = $cron_start['value'];
 
    if($cron_start == "ok")
    {
        include "_cron.php";
        sleep(20);
    }
    else
    {
        break;
    }
}
Colored by Color Scripter
cs

 

데몬은 php 로 작성하였으며, DB에 특정값이 "ok" 가 떨어질 동안 20초 간격으로 계속 _cron.php 파일을 실행합니다.

_cron.php 파일안에 초단위 시세 API 를 수집하는 프로그램이 작동중입니다.

여기까지 제작을 하고, 욕심이 더 생겼습니다.

관리자 페이지에서 이 데몬을 ON/OFF 를 제어하고 싶었습니다.

 

그래서 웹 관리자 페이지에 특정 버튼을 누르면 아래와 같이 exec 로 위 데몬을 작동하게끔 하였습니다.

 

exec('crontab _cron_start.php'); 

 

뭐 작동은 잘됩니다.

버튼 하나로 제가 만든 데몬이 실행되는 것이지요.

다만 문제가 발생했습니다.

데몬 소스가 조건절에 의한 무한루프 소스다보니, 관리자페이지에서 데몬을 실행하면, 관리자 페이지가 뻗어버리는 증상이 발생했습니다.

데몬이 돌아가는 메모리를 고스란히 웹관리자가 먹는것 같았습니다.

 

그래서 고민한 끝에 한가지 꼼수를 생각해냈습니다.

크론탭으로 데몬을 실행하고, 크론탭을 바로 지워버리면? 데몬을 실행하는건 크론탭이기 때문에 웹관리자가 영향을 안 받지 않을까?

 

결과는 성공적이었습니다.

 

크론탭 실행은 아래와 같습니다.

_cron_script.php 파일

* * * * * php /home/proejct/_cron_start.php 

 

1분에 1번 데몬을 실행하는 크론탭 명령을 _cron_script.php 파일에 넣어뒀습니다.

그리고 exec 를 다시 수정했습니다.

 

exec('crontab _cron_script.php'); 

 

정상적으로 웹관리자는 뻗지않고, _cron_start.php 다 실행이 됨이 확인되었습니다.(DB에 데이터가 잘 들어감이 확인)

자 이제 마지막으로 crontab 을 제거해 줘야 합니다.

_cron_start.php 파일

exec("crontab -r"); 

 

위와같이 크론을 바로 제거해 줌으로써, 데몬소스가 한번만 실행되고 종료가 되게 하였습니다.

실행된 데몬 소스는 한번만 실행되었지만, while 안에서 조건문에 걸리지 않는 이상 20초마다 수집프로그램을 가동시킵니다.

 

하루동안 삽질해서 얻은 결과였습니다.

 

순서 정리합니다.

1. 웹관리자에서 크론실행버튼 클릭

2. exec('crontab _cron_script.php'); 으로 _cron_script.php 크론이 실행됨. 크론명령어(* * * * * php /home/proejct/_cron_start.php)

3. 데몬파일이 실행됨. - _cron_start.php

4. 데몬파일안에서 크론명령을 지움. - exec("crontab -r");

5. 데몬이 설정된 초단위만큼 주기적으로 데이터 수집을 함.

 

개발은 꼼수다.

 

 

 

 

 

0
0

목록

Facebook Twitter GooglePlus KakaoStory NaverBand
1 Comments

비밀번호 확인

확인
댓글은 자신을 나타내는 '얼굴'입니다. *^^*
등록
자동등록방지 숫자를 순서대로 입력하세요.

댓글수정


글쓰기
검색
번호 제목 이름 날짜 조회
  • 68
    최강의 ssh 관리툴은 MobaXterm
    마스터욱
    조회수 182   25-11-18 05:26
    마스터욱
    25-11-18 05:26
    182
  • 67
    xcode & swift 환경에서 파이어베이스 푸시설정 이외 info 설정들(메모메모)
    마스터욱
    조회수 188   25-08-05 03:18
    마스터욱
    25-08-05 03:18
    188
  • 66
    맥북 없이 IOS 앱 개발하기(웹뷰기반)
    마스터욱
    조회수 331   25-06-11 06:48
    마스터욱
    25-06-11 06:48
    331
  • 65
    윈도우에서 삭제되지 않는 파일/폴더 강제로 삭제하기
    마스터욱
    조회수 236   25-04-11 00:43
    마스터욱
    25-04-11 00:43
    236
  • 64
    무료 이미지 서버
    마스터욱
    조회수 888   24-08-03 23:52
    마스터욱
    24-08-03 23:52
    888
  • 63
    Git 터미널 계정 변경 방법
    마스터욱
    조회수 251   23-10-15 02:32
    마스터욱
    23-10-15 02:32
    251
  • 62
    ****************************** gitbub - Private Repository 다른 사람과 공유하기+클론
    마스터욱
    조회수 359   23-10-15 02:27
    마스터욱
    23-10-15 02:27
    359
  • 61
    git - 다른 브랜치에서 pull 받기
    마스터욱
    조회수 166   23-10-15 02:15
    마스터욱
    23-10-15 02:15
    166
  • 60
    git에러 => fatal: refusing to merge unrelated histories
    마스터욱
    조회수 180   23-10-15 02:10
    마스터욱
    23-10-15 02:10
    180
  • 59
    디컴파일러 다운로드 및 사용법
    마스터욱
    조회수 153   23-10-08 23:27
    마스터욱
    23-10-08 23:27
    153
  • 58
    [2] 스테이블 디퓨전(stable-diffusion-webui) 설치방법 [2]
    마스터욱
    조회수 346   23-09-23 14:17
    마스터욱
    23-09-23 14:17
    346
  • 57
    리다이렉트(redirect) 에 대한 고찰과 개념정리
    마스터욱
    조회수 205   23-09-18 01:48
    마스터욱
    23-09-18 01:48
    205
  • 56
    [1] ****************************** Github private repository를 clone하는 방법 [1]
    마스터욱
    조회수 326   23-08-28 14:09
    마스터욱
    23-08-28 14:09
    326
  • 55
    [7] ****************************** vscode 와 github 연동관련 메모(+SFTP 추가) [7]
    마스터욱
    조회수 598   23-08-24 04:22
    마스터욱
    23-08-24 04:22
    598
  • 54
    vscode 로 github 레파지토리에 업로드 하기
    마스터욱
    조회수 153   23-08-24 04:06
    마스터욱
    23-08-24 04:06
    153
  • 53
    IP 변경하는 방법
    마스터욱
    조회수 167   23-07-14 22:23
    마스터욱
    23-07-14 22:23
    167
  • 52
    [2] 딥러닝/머신러닝 공부 자료들 [2]
    마스터욱
    조회수 226   23-06-28 17:09
    마스터욱
    23-06-28 17:09
    226
  • 51
    웹앱으로 진동알림 설정
    마스터욱
    조회수 172   23-06-07 03:15
    마스터욱
    23-06-07 03:15
    172
  • 50
    PWA 를 이용한, 바탕화면에 홈페이지 아이콘 자동으로 생성하기
    마스터욱
    조회수 167   23-06-07 03:12
    마스터욱
    23-06-07 03:12
    167
  • 49
    서브도메인 DNS 설정방법
    마스터욱
    조회수 222   23-03-10 17:20
    마스터욱
    23-03-10 17:20
    222
글쓰기
검색
  • 1
  • 2
  • 3
  • 4
  • 다음

Search

개인정보처리방침
마스터욱. All rights reserved.

Close

0 명 접속중
Time Loading...