본문 바로가기
Server/Linux

[Linux] crontab 설정 및 로그 확인

by ojava 2021. 1. 13.
반응형
crontab 설정 요청만 해봤지 이걸 내가 할 줄은 몰랐네 22222

까지만 쓰다가 케케묵은 작성중인 글로 남아있길래 완성시켜서 하나의 포스팅으로 작성하기

 
벌써 2021년이니까 재작년에 linux 설정을 위한 고군분투하던 기간이 있어 해당 내용을 재탕해본다.
안그래도 리눅스 관련 자격증을 따볼까 하고 있었는데, 이 기회에 제대로 공부해볼까 하는 생각이 든다.
(너무 다양한 분야에 관심 있어서 포지션이 애매해지는건 아닐까 싶기는 한데 공부해서 나쁠 건 하나도 없다. 물론 하는만큼 벌거나 버는 만큼 하거나 둘 중 하나만 하겠지만)

 

 

이번에는 crontab에 신규 쉘 프로그램을 등록하는 과정에 대해 알아보려고 한다.
* crontab은 cron을 관리하는 table을 말한다. crontab = cron table

 

우리가 새롭게 만든 shell 파일 또는 주기적으로 실행되어야하는 어떤 파일을 crontab에 등록하기 위해 확인 및 수정해야 하는 파일과 crontab에 등록된 내용이 실행되었을 때 자동적으로 쌓이는 로그 파일의 내용을 확인하는 방법까지 안내하도록 한다.

 

 

[Linux] crontab 설정 및 로그 확인

 

테스트로 crontab에 등록할 간단한 shell 파일부터 만들어보자.

crontab에 등록한 스케쥴링이 정상적으로 동작하는 지 확인하기 위해서 특정 파일에 수행 시간과 간단한 텍스트를 입력하도록 구성할 예정이다.

 

#!/bin/bash

#############################
# testForCrontab.sh
# author : ojava
#############################

#현재시각을 담아둘 변수
nowdate=$(date +"%Y-%m-%d %H:%M:%S")

# 텍스트와 crontab이 수행될 시각을 같이 표현해서 check_test라는 파일에 작성한다.
echo "It is ${nowdate}, crontab test success." >> check_test

 

내용은 위와 같이 작성해서 testForCrontab.sh 이라는 이름으로 생성하면 되고, 생성 방법은 vi 등의 에디터를 이용하면 간단하게 작성이 가능하다.

파일을 만들어서 실행시키고, 그 결과를 확인할 수 있는 check_test 파일을 열어보면 아래와 같은 결과를 확인할 수 있다.

 

해당 쉘 프로그램을 실행할 때마다, 실행 당시의 일자와 시간을 포함해서 check_test라는 파일에 내용이 저장된 걸 확인할 수 있다. 

 

 

등록된 crontab 목록 확인 및 crontab 상세 설정

시스템에서 동작하고 있는 crontab 전체 목록을 조회하고자 하는 경우, etc 하위에 위치한 crontab 파일을 열어보면 확인이 가능하다.

열어보니 의외의 발견을 하게 된다.
뒤에 따로 설명하려고 했던 crontab 설정 방법이 주석으로 아주 잘 달려있기 때문에 한 번에 설명하고자 한다.

필드 설명 입력 가능 예시
m minute, 분 정보를 입력한다. 0~59 사이의 숫자
h hour, 몇시에 수행될지를 정하는 시 정보. 0~23 사이의 숫자
dom day of month (= day), 일자 정보 1~31 (1~해당 월의 최대일자까지)
mon month, 월 정보 1~12
dow day of week, 요일정보 0~7 (0 일요일, 1 월요일, 2 화요일
순으로 증가. 7은 다시 일요일)
user user, 사용자 정보  
command command, 수행되어야 할 명령어  

 

입력 가능 예시에 없는 숫자가 아닌 문자가 위 캡쳐화면에 있는데, 추가로 입력 가능한 특수 문자들이 있다.

* (asterisk) : 해당 기호가 입력되면 해당 필드의 모든 값에서 cron이 수행된다.
ex. 30 5 * * * 이라고 할 때, 해당 cron은 매일 5시 30분에 수행된다.

- (dash) : 숫자 구간을 지정할 수 있다.
ex. 0 3 1-3 * *, 매달 1일부터 3일 사이의 3시 0분에 수행된다.

, (comma) : 특정값을 여러 개 지정할 수 있다. 구간이나 주기로 지정이 안되는 불특정한 값일 때 사용
ex. 0 7,9,12 * * *, 매일 7시 9시 12시 0분에 수행된다.

/ (slash) : 값을 특정 주기로 나눌 때 사용
ex. */5 * * * *, 5분마다 수행해야 하는 경우

 

 

위의 파일은 전체 시스템을 대상으로 등록된 cron이고 사용자별로 등록된 cron은 간단하게 crontab -l 명령어로 확인이 가능하다. 
느낌적인 느낌이 오겠지만 -l 은 list로 표시하라는 추가 명령어를 호출한 내용이다.
도움말을 보기 위해 일부러 잘못된 옵션을 주고 명령어를 수행했다.

 

명령어 및 옵션 내용 부가 설명
crontab -l 현재 로그인한 user의 cron 목록 조회  
crontab -e crontab 내용 입력/수정  
crontab -r crontab 내용 삭제  
crontab -u 특정 user의 crontab을 설정할 때 다른 명령어를 쓸 때 같이 쓰면
특정 사용자의 crontab 조회 및 수정 가능
crontab -i crontab 내용 삭제 전 확인 문구 띄우기 confirm창 같은 느낌으로, 삭제여부 재확인

 

crontab -i -r 또는 crontab -ir 모두 동일하게 동작함. 삭제 전 확인 문구 띄우기!

 

직접 명령어를 사용해서 crontab에 등록해보고 실제 수행여부를 확인한 뒤, 삭제하는 과정까지 수행해봤다.

 

반응형

 

crontab 설정 변경내용 적용

crontab -e로 새롭게 저장한 뒤에는 crontab 변경 내용에 대해서 명령어로 재시작 또는 시작해줘야 한다.

ubuntu 환경의 경우 service cron start 였지만 OS마다 명령어가 조금씩 다르다. 찾은 김에 linux, ubuntu를 아래와 같이 정리한다.

OS ubuntu linux
시작 service cron start service crond start
재시작 service cron restart service crond restart
중단 service cron stop service crond stop

 

cron 설정 변경 후 시작

 

시간이 갑자기 1분 단위로 바뀐 것 같은건 기분 탓이 아니라 실제다.
명령어로 삭제/등록 등 테스트를 반복하다가 * * * * * 형태로 crontab 설정을 바꿨다.

 

crontab 변경내용을 적용했더니 1분마다 내용이 잘 실행된다.

cron 중단 명령어를 치니까 왜 안먹힐까 봤더니 /var/run/crond.pid 파일의 변경 권한이 없다고 한다.
start, restart는 되더니 stop이 안된다. root 권한이 있거나 sudo 권한이 있으면 sudo service cron stop 등으로 수행하거나 root 계정으로 접속해서 처리하고 아니면 crontab -r로 설정을 날리면 되겠다.

 

 

crontab 실행로그 조회

기본적으로 ubuntu에서는 syslog에 cron 로그가 통합되어 나온다고 하는데, 별도의 파일로 만들고 싶은 경우 /etc/rsyslog.d 폴더 하위의 50-default.conf를 수정해주면된다.

root 권한의 파일이므로 sudo를 써주는게 좋다. 복사 붙여넣기 할 분들을 위해 sudo vi /etc/rsyslog.d/50-default.conf

 

 

수정 후에는 해당 내용을 적용해주는 명령어를 쳐야 적용된다.
일반 유저로 접속했다는 가정하에 sudo service rsyslog restart 로 수행하자.

굳이 별도의 파일로 안봐도 되면 /var/log/syslog에서 grep 명령어 등으로 필터 걸어서 봐도 된다.

 

cron 수행이력과 crontab -r로 삭제한 이력을 볼 수 있다.

 

너무 오래동안 묵혀있던 포스팅을 완성해서 기분이 좋다.
사실 이 설정을 내가 직접할 일도 없을 뿐더러 sudo 권한을 가진 계정을 부여받을 일도 없겠지만, 공부하는 차원에서 정리해둬서 뿌듯.

도움되시는 분들이 있기를 바라며!

 

 

 

 

 

반응형

'Server > Linux' 카테고리의 다른 글

[Linux] 로그 삭제 배치프로그램  (2) 2019.09.23
[Linux] alias 설정하기  (0) 2019.09.02
IP 확인 : ping, tracert, nslookup  (0) 2018.10.04
[Linux] 최근 변경 파일 탐색  (0) 2018.09.27
Ubuntu에 Oracle JDK 설치하기  (0) 2017.06.20