Crontab 스케줄러 다루기

안녕하세요.

JP-Hosting입니다.

리눅스에서 일정한 시간마다

반복 작업을 해야 할 때, 사용하는 Crontab에 대해 알아보도록 하겠습니다.

윈도우에는 작업 스케줄러가 존재하듯, 리눅스에도 Crontab이 존재합니다.

특정한 시간마다 정해둔 명령어가 계속 실행되도록 도와주는 패키지인데요.

Crontab 설정에 대해 다루어보려고 합니다.

  • 테스트환경은 Centos 7.8 버전입니다.

[root@localhost ~]# rpm -qa *-release 
centos-release-7-8.2003.0.el7.centos.x86_64

  • Crond 서비스 확인
[root@localhost ~]# systemctl status crond
● crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2020-05-30 15:01:43 JST; 29min ago
Main PID: 31877 (crond)
CGroup: /system.slice/crond.service
└─31877 /usr/sbin/crond -n

May 30 15:01:43 localhost.localdomain systemd[1]: Started Command Scheduler.
May 30 15:01:43 localhost.localdomain crond[31877]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 49% if used.)
May 30 15:01:43 localhost.localdomain crond[31877]: (CRON) INFO (running with inotify support)
May 30 15:01:43 localhost.localdomain crond[31877]: (CRON) INFO (@reboot jobs will be run at computer's startup.)
  • Crontab 설정
  • Crontab 설정의 경우 두가지 방법으로 설정이 가능합니다.

    1. /etc/crontab 파일을 직접 수정하는 방법

    
    [root@localhost ~]# vi /etc/crontab
    SHELL=/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    MAILTO=root
    
    # For details see man 4 crontabs
    
    # Example of job definition:
    # .---------------- minute (0 - 59)
    # | .------------- hour (0 - 23)
    # | | .---------- day of month (1 - 31)
    # | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
    # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
    # | | | | |
    # * * * * * user-name command to be executed
    
    

2. Crontab 명령어를 이용하는 방법

[root@localhost ~]# crontab -e # 내 crontab 수정
[root@localhost ~]# crontab -l # 내가 설정한 crontab 확인
[root@localhost ~]# crontab -e -u test # test란 이름의 사용자의 crontab 수정
[root@localhost ~]# crontab -l -u test # test란 이름의 사용자의 crontab 확인
  •  Crontab 명령어 예시
*/1 * * * * echo "every 1 min" # 1분마다 실행
*/30 * * * * echo "every 30 min" # 30분마다 실행
30 */6 * * * echo "every 6hours at 30 mins" # 6시간마다 실행 (00:30, 06:30, 12:30, 18:30)
30 1-18/2 * * * echo "every 2hours on 1am - 6pm" # (01 ~ 18)까지 매 2시간마다 실행 01:30, 03:30, ... 17:30)
  • 결과 예시 (cat /var/spool/mail/root)
  • 1분마다 “every 1 min” 문구가 실행된것을 확인
From root@localhost.localdomain Sat May 30 16:19:01 2020
Return-Path: <root@localhost.localdomain>
X-Original-To: root
Delivered-To: root@localhost.localdomain
Received: by localhost.localdomain (Postfix, from userid 0)
id 417A51B6010A; Sat, 30 May 2020 16:19:01 +0900 (JST)
From: "(Cron Daemon)" <root@localhost.localdomain>
To: root@localhost.localdomain
Subject: Cron <root@localhost> echo "every 1 min"
Content-Type: text/plain; charset=UTF-8
Auto-Submitted: auto-generated
Precedence: bulk
X-Cron-Env: <XDG_SESSION_ID=33>
X-Cron-Env: <XDG_RUNTIME_DIR=/run/user/0>
X-Cron-Env: <LANG=en_US.UTF-8>
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=root>
X-Cron-Env: <USER=root>
Message-Id: <20200530071901.417A51B6010A@localhost.localdomain>
Date: Sat, 30 May 2020 16:19:01 +0900 (JST)

every 1 min

From root@localhost.localdomain Sat May 30 16:20:01 2020
Return-Path: <root@localhost.localdomain>
X-Original-To: root
Delivered-To: root@localhost.localdomain
Received: by localhost.localdomain (Postfix, from userid 0)
id 539BA1B6010D; Sat, 30 May 2020 16:20:01 +0900 (JST)
From: "(Cron Daemon)" <root@localhost.localdomain>
To: root@localhost.localdomain
Subject: Cron <root@localhost> echo "every 1 min"
Content-Type: text/plain; charset=UTF-8
Auto-Submitted: auto-generated
Precedence: bulk
X-Cron-Env: <XDG_SESSION_ID=34>
X-Cron-Env: <XDG_RUNTIME_DIR=/run/user/0>
X-Cron-Env: <LANG=en_US.UTF-8>
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=root>
X-Cron-Env: <USER=root>
Message-Id: <20200530072001.539BA1B6010D@localhost.localdomain>
Date: Sat, 30 May 2020 16:20:01 +0900 (JST)

every 1 min

이번 포스트에서는 간단하게 Crontab을 사용하는 방법에 대해 알아보았는데요.

이런 Crontab의 경우 주로 시간 동기화나 http 재시작, 주기적인 백업 스크립트 작동등

여러 방면에서 활용도가 높은 패키지입니다.

서버 문의는 텔레그램통해 연락 부탁드립니다.

좋은하루 되세요!