본문 바로가기

# Development/DevOps

[Ubuntu] 리눅스 우분투 Cron(크론), Crontab(크론탭) 설정

리눅스 우분투 Cron(크론), Crontab(크론탭) 설정

매일 특정 시간에 API를 호출해야 하는 작업이 있어서 우분투에서 crontab에 작업을 추가했다.

 

멀티태스킹이 가능한 운영체제에서 사용자에 의해 제어 및 관리되지 않고, Background Process로 돌며 작업을 수행하는 프로그램을 Daemon(데몬)이라 한다. Daemon의 프로세스들은 보통의 Foreground Process의 프로그램들과 구분되기 위해 이름의 끝에 'd' 를 포함한다.

 

리눅스에서 지정한 스케쥴에 맞춰 작업을 수행 하는 데몬을 Cron(크론)이라고 하고,이 Cron이 수행할 작업과 스케쥴을 설정해 명령 리스트를 만드는 것을 Crontab(크론탭)이라고 한다. 이 기능을 사용하면 24시간 동작하는 서버에서 특정 시간에 특정 작업을 자동으로 실행 시킬 수 있다.

 

Crontab 설정 과정을 하나씩 진행해보자.


1. 수행할 작업 내용 Shell Script(.sh) 작성

1) 본인이 편한 편집기를 사용해 파일 생성(작성)

ubuntu@SERVER:~/$ nano auto.sh

2) shell script 작성

# !/bin/bash
.~ubuntu/dataflare/.bash_projile
####################################

nowdate = $(date+"%Y-%m-%d %H:%M:%S")
echo="${nowdate},auto check started" >> /home/ubuntu/auto_log.txt

check = $(curl -X GET http://sample.test.net/api/check_auto)
echo "${check}" >> /home/ubuntu/auto_log.txt

2. 우분투 crontab 작성

1) crontab 명령어

  • crontab -e : 내용 수정/작성
  • crontab -l : 현재 사용자의 cron 목록 조회
  • crontab -r : crontab 삭제

2) cron 작업 추가

crontab -e 명령어를 입력하면

ubuntu@SERVER:~/$ crontab -e

아래의 창이 열린다. 여기 하단에 cron 작업을 추가할 수 있다.

# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h  dom mon dow   command

0 10 * * * /home/ubuntu/auto.sh

" * * * * *  "  작업 시간 설정

분(min) / 시간(hour) / 일(day) / 월(month) / 요일(1(mon)~7(sun))

  • * * * * * :일분 주기로 작업 수행
  • /10 * * * * : 10분 주기로 작업 수행
  • 0 9 * * * : 매일 9시 작업 수행
  • 0 10 * * 1 : 월요일 10시 작업 수행

다음과 같이 해당 작업에 대해 로그 기록도 남길 수도 있다.

0 10 * * * /home/ubuntu/auto.sh >> /home/ubuntu/dataflare/auto.sh.log 2>&1

 

3) cron 시작

cron을 작업을 처음 시작한다면 cron을 시작하는 명령어 입력이 필요하다.

ubuntu@SERVER:~/$ sudo service cron start

cron 작업을 수정한 후에는 항상 cron을 재시작 해야한다.

ubuntu@SERVER:~/$ sudo service cron restart

status를 통해 cron 작동 상태를 확인할 수 있다.

ubuntu@SERVER:~/$ sudo service cron status

 

4) cron 백업

crontab의 cron 작업 리스트가 삭제될 경우를 대비하여 crontab 백업 작업을 crontab 하단에 추가할 수 있다.

50 23 * * * crontab -l > /home/bak/crontab_bak.txt

 

<참고>

'# Development > DevOps' 카테고리의 다른 글

[WSGI] WSGI란?  (0) 2023.02.13
[AWS EC2] 인스턴스 중지 및 시작  (0) 2023.01.18
[Nginx] 504 Gateway Time-out  (0) 2022.06.27
[Ubuntu] 리눅스 우분투 timezone 설정  (0) 2022.05.16