기술 정리 & CS/기타 지식

[Cron] 작업 스케쥴러 (Cron, CronTab, CronJob)

yubi5050 2022. 8. 26. 00:39

Cron & CronTab 이란?

Cron이란 유닉스 계열에서 시간 기반 Job Scheduler로 주기적인 시간 or 날짜 마다 실행 하는 것

윈도우에서는 작업 스케쥴러라는 명칭을 많이 씀

 

🎈 Cron

주어진 스케줄 마다 쉘 명령어를 실행하는 주체

cron : the name of the tool 

 

🎈 CronTab

cron 데몬들에 대한 명령어들이 보관된 작업 목록(+Cron 작업에 대한 설정)을 의미 

crontab is generally the file that lists the jobs 

 

🎈 CronJob

크론이 실행되어 크론 탭에 쌓이면, 그러한 행위들을 크론잡

cron will be executing, and those jobs are cronjobs.

 

실행 방법

1. Linux 자체 Cron 이용

# linux 방식 - 해당 파일에서 값 수정
## example
# minute hour day month week         job
# 0,30,   *    *    *    *     ls -ef | grep python 

$ crontab -e 에 들어가 위 설정 내용을 작성하고 나오면 끝

 

2. Framework의 Crontab들 이용

django의 django-crontab이나 flask의 flask-crontab 등이 존재함.

 

django CronTab 예시

# 단 django crontab의 경우 linux에서만 가능
$ pip install django-crontab

 

# settings.py
INSTALLED_APPS = (
    'django_crontab',
    ...
)

CRONJOBS = [
    ('* * * * *', 'app.cron.hello_every_minute', '>> /tmp/log/cron.log'),
]

# cron.py
def hello():
    print('hi')
$ python manage.py crontab add # 등록
$ python manage.py crontab show # crontab 진행중 확인
$ python manage.py crontab remove # 삭제시

 

3. celery의 beat 사용

 

4. Kubernetes의 CronJob(배치잡) 이용

kubernetes에서는 cronjob 이란 유닉스의 CronTab과 같은 유사한 기능을 제공한다. ex) 야간 등 트래픽이 비교적 적은 시간에 클러스터의 리소스를 활용하여 배치 작업을 처리

 

cronJob.yaml 파일

# cronjob.yaml
apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: showdate
spec:
  schedule: "*/5 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: showdate
            image: busybox
            args:
            - /bin/sh
            - -c
            - date; echo Hello cronjob
          restartPolicy: OnFailure
# CronJob 실행
$ kubectl create -f cronjob.yaml

# CronJob 확인
$ kubectl get cronjob