Linux OS(Ubuntu)에서의 스케줄러

HKTUOHA·2024년 6월 26일

목차

  1. cron 활용
  2. c 활용
  3. cron 표현식
  4. cron과 프로그래밍 언어의 차이

실행결과


1. cron을 활용한 주기적인 현재 시간 콘솔 출력

time.sh

#!/bin/bash

date

crontab 수정

sudo vi /etc/crontab
마지막 줄에 다음 내용 추가

* * * * * yunjae /home/yunjae/240626_cron/time.sh >> /home/yunjae/240626_cron/cron_time.log

  • 실행 결과를 로그 파일에 저장

로그 파일 실행

sudo tail -f /home/yunjae/240626_cron/cron_time.log

  • 새로운 로그 메시지가 추가될 때마다 실시간으로 출력


2. 프로그래밍 언어를 활용한 주기적인 현재 시간 콘솔 출력

time.c

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(){

    int time = 0;

    while(1){
        sleep(1);

        time++;

        if (time == 60){
            system("date");
            time = 0;
        }
    }   
    

    return 0;
}
  • 컴파일 및 실행파일 생성 gcc -o time time.c
  • 실행 ./time


3. cron 표현식 정리

* * * * * command
- - - - -
| | | | |
| | | | +----- 요일 (0 - 6) (0=일요일, 1=월요일, ... , 6=토요일)
| | | +------- 월 (1 - 12)
| | +--------- 일 (1 - 31)
| +----------- 시간 (0 - 23)
+------------- 분 (0 - 59)

필드

  • 분 (Minute): 한 시간 안의 몇 분에 실행 (0 - 59).
  • 시간 (Hour): 하루 중 몇 시에 실행 (0 - 23).
  • 일 (Day of Month): 한 달 중 몇 일에 실행(1 - 31).
  • 월 (Month): 한 해 중 몇 월에 실행 (1 - 12).
  • 요일 (Day of Week): 주 중 몇 요일에 실행 (0=일요일, 1=월요일, ..., 6=토요일).

  • 여러 값은 쉼표(,) 구분하여 표기 가능
  • 범위 지정 시 대시(-) 사용 가능
    • 예) 1-5 : 1부터 5까지의 범위

특수문자

  • ' * ' : 모든 값에 매칭
    • 예) * * * * * : 매 분마다 실행
  • ' / ' : 주기, 간격 설정 가능
    • 예) /5 * * * : 매 5분마다 실행

예시

  • 매 시간 30분마다 실행: 30 * * * *

  • 매일 오전 8시에 실행: 0 8 * * *

  • 매 월 1일 새벽 3시에 실행: 0 3 1 * *

  • 매주 월요일 오전 9시 30분에 실행: 30 9 * * 1


4. cron과 프로그래밍 언어 스케줄러 차이

스케줄러 선택

  • 간단하고 단순한 작업을 반복해야 하는 경우에는 실행 주기 설정이 편한 cron

  • 처리가 복잡한 프로그램 같은 경우에는 예외처리를 위해 프로그래밍 언어

  • cron은 터미널에 바로 출력하는 게 어렵고, 로그 파일을 사용해야 한다.

  • 프로그래밍 언어는 자유도가 높아서 cron보다는 프로그래밍 언어를 더 자주 사용할 것 같다.


주의할 점

cron을 사용할 때 주의할 점

  • 환경 변수
    cron은 일반적으로 사용자 환경 변수를 제한적으로 로드하기 때문에, 스크립트나 명령어가 실행될 환경 변수 설정에 주의해야 함.

  • 절대 경로
    cron에서 실행하는 스크립트나 명령어의 경로는 절대 경로로 설정하는 것이 안전함.

  • 권한
    cron 작업을 실행할 때 파일 접근 권한이나 실행 권한 등을 확인해야 함.

  • 로그 관리
    cron 작업의 로그는 별도의 설정 없이는 표준 출력(stdout) 또는 표준 에러(stderr)에 출력되므로, 로그 관리를 위해 리디렉션을 사용하거나 로깅 설정을 추가해야 함.

프로그래밍 언어를 사용할 때 주의할 점

  • 무한 루프
    실행 주기를 정확히 설정하지 않으면 무한 루프에 빠질 수 있음.

  • 예외 처리
    예외 처리를 통해 예상치 못한 상황에서의 오류를 잘 관리해야 함.

  • 시스템 리소스 사용
    실행 중인 프로그램이 시스템 리소스를 많이 사용할 수 있으므로, 이를 고려한 설계가 필요함.

  • 동시성
    동시에 여러 작업을 실행할 때 발생할 수 있는 동시성 문제를 고려하여 코드를 설계해야 함.

profile
공부 기록

0개의 댓글