Profile

생각정리..

Lunight

[Ubuntu]Cron 그리고 Crontab (스케줄링)


운영환경

Linux : ubuntu 14.04




1. Cron & crontab


cron은 소프트웨어 데몬으로 유닉스 계열에서 시간 기반 작업 스케줄로 소프트웨어 환경을 설정 및 관리하고 관리자가 원하는 시간, 날짜에 주기적으로 실행할 수 있도록 해준다.


cron은 셸 명령어들이 주어진 스케줄에 실행하도록 규정해 놓은 crontab이라는 파일(cron table)에 의해 구동된다. 


crontab은 작업 목록 및 cron 데몬에 대한 명령어들이 보관된 위치에 저장되어 있다. 


리눅스 User는 자신만의 개개의 crontab 파일을 가질 수 있다.



< cron 운영 스케줄 >


cron은 시작할 때 모든 곳에 저장된 설정파일들을 읽어 메모리에 저장해두고 대기모드로 들어갔다가 매 분마다 할성화되 변경된 crontab 파일들이 있는지 체크하고 변경된 경우 다시 메모리에 저장하고 실행작업이 있는지 확인한 후에 다시 대기모드로 들어간다.


 

 # ┌───────────── min (0 - 59)
 # │ ┌────────────── hour (0 - 23)
 # │ │ ┌─────────────── day of month (1 - 31)
 # │ │ │ ┌──────────────── month (1 - 12)
 # │ │ │ │ ┌───────────────── day of week (0 - 6) (0 to 6 are Sunday to Saturday, or use names; 7 is Sunday, the same as 0)
 # │ │ │ │ │
 # │ │ │ │ │
 # * * * * *  command to execute

< crontab 스케줄 구조 >


2. Cron 파일 


 cronid(패키지) = crond(데몬) + crontab(cron table)


cron이 참조하는 crontab 파일 위치 

  • /var/spool/cron
    시스템 개별 사용자를 위한 crontab 파일 위치이며 일반적으로 root 계정용 하나와 계정 사용자당 1개의 파일을 갖게된다.
    파일명은 사용자의 계정명이며 cron은 이이름을 바탕으로 설정 파일에 지정된 작업을 실행시 사용할 UID를 결정한다. 이 곳에 있는 설정파일들은 crontab 명령어으로 관리하게 된다.



  • /etc/cron.d
    소프트웨어 패키지를 설치할 때 필요한 주기적 작업을 등록하는 공간으로 사용.

  • /etc/crontab
    관리자가 직접 지정한 작업을 설정하며 , 임의의 사용자 권한으로 실행할 수 있다. 시스템 관련 작업을 등록하는 곳이다. 

  • /etc/cron.allow
    파일 내 지정된 사용자만 crontab을 등록할 수 있다. 지정하지 않은 사용자는 crontab 명령을 실행할 수 없다. 

  • /etc/cron.deny
    허용파일이 없는 경우에는 이 deny 파일을 사용. 이 파일을 제외한 나머지 사용자에게 crontab 명령 실행 권한이 주어진다. 

    두 파일이 없는경우 root 관리자만 허용된다. 단 데비안, 우분투 배포판은 모든 사용자에게 실행권한을 준다. 


  • 그외..



    cron.hourly : 시간
    cron.daily : 일별
    cron.weekly : 주별
    cron.monthly : 월별

    해당 디렉토리 아래 cron 작업파일들을 실행하도록 설정되어 있다.

3. crontab 명령어 

# 작업리스트

# crontab -l

# 작업수정

# crontab -e

# 작업삭제

# crontab -r

# 루트관리자용 

해당 사용자의 crontab 파일을 보거나 삭제 , 편집가능

# crontab -u <사용자명> 


# 루트권한이 필요한 주요 스케줄 등록 

시스템 백업 , 로그관리를 위한 처리는 /etc/crontab을 수정한다.

예제 : 


#crontab -e

# 월~금요일 매월 매일 10시 5분과 45분에 루트권한으로 시간동기화 명령어를 실행한다. 

    45,5 10 * * 1-5 root /usr/bin/rdate -s time.bora.net && clock -w

  • * : 범위 내 모든 경우

  • 숫자 : 정확히 일치하는 그 시각, 날짜

  • '-' 기호로 연결된 두 숫자 : 두 숫자 사이에 포함된 범위를 뜻함

  • 콤마(,)로 구분돼 나열된 숫자 : 나열된 숫자 중 일치하는 경우를 뜻함


4.cron log

우분투 시스템에서는 기본적으로 cron 로그기록이 비활성화 되어 cron.log가 syslog에 통합된다.(/var/log/syslog)
단독으로 cron.log를 활성화하고 싶은 경우에는 "etc/rsyslog.d/50-default.conf"파일에 접근하여 cron 로그를 황성화시켜주면 된다. 


syslog 재시작


# sudo service rsyslog restart


5. 실습 


사용자 계정으로 # crontab -e로 수정하는 경우 cron이 정상적으로 동작되지 않았다. 그래서 직접 /etc/crontab에 추가하고 그 결과를 살펴보았다. 


이유는 아무래도 경로와 명령어가 root권한이 없이 시작되는 것 같아서 직접 해당 경로에 작성하고 cron을 재시작 해주었다.


실습 명령은 앞에서 사용중인 gitlab을 마운트한 백업 하드디스크에 매 10분때 백업을 하도록 설정하였다. 


 



2018/03/05 리포트 



gitlab-ctl reconfigure를 할 때 자동으로 generate되는 파일이다. 


# /var/opt/gitlab/gitlab-rails/etc/gitlab.yml 


때문에 원래 default 백업경로(/var/opt/gitlab/backups)에 신나게 백업되고 있었다...ㅠㅠ


그래서 /var/opt/gitlab/gitlab-rails/etc/gitlab.yml을 다시 수정하고 확인해보니 정상적으로 백업되었다.


그리고 cron을 설정할때 사용자 계정으로 crontab -e를 통해 수정하지말고 직접 sudo /etc/crontab을 수정해서 사용하자 




어차피 중요 시스템 백업 , 검사를 주기적으로 할거니까..^^


















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

[Ubuntu] 미러사이트 변경하자  (0) 2018.03.28
[Ubuntu] apt-get update와 apt-get upgrade 차이  (0) 2018.03.05