Crontab 스케줄러 다루기

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 SchedulerLoaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)Active: active (running) since Sat 2020-05-30 15:01:43 JST; 29min agoMain PID: 31877 (crond)CGroup: /system.slice/crond.service└─31877 /usr/sbin/crond -nMay 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/crontabSHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=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 [email protected] Sat May 30 16:19:01 2020Return-Path: <[email protected]>X-Original-To: rootDelivered-To: [email protected]: by localhost.localdomain (Postfix, from userid 0)id 417A51B6010A; Sat, 30 May 2020 16:19:01 +0900 (JST)From: "(Cron Daemon)" <[email protected]>To: [email protected]: Cron <root@localhost> echo "every 1 min"Content-Type: text/plain; charset=UTF-8Auto-Submitted: auto-generatedPrecedence: bulkX-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: <[email protected]>Date: Sat, 30 May 2020 16:19:01 +0900 (JST)every 1 minFrom [email protected] Sat May 30 16:20:01 2020Return-Path: <[email protected]>X-Original-To: rootDelivered-To: [email protected]: by localhost.localdomain (Postfix, from userid 0)id 539BA1B6010D; Sat, 30 May 2020 16:20:01 +0900 (JST)From: "(Cron Daemon)" <[email protected]>To: [email protected]: Cron <root@localhost> echo "every 1 min"Content-Type: text/plain; charset=UTF-8Auto-Submitted: auto-generatedPrecedence: bulkX-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: <[email protected]>Date: Sat, 30 May 2020 16:20:01 +0900 (JST)every 1 min

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

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

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

​

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

좋은하루 되세요!

​

Powered by Blogger.