• 예약 작업 처리

    2021. 6. 6.

    by. 공상개발

    # cron

    시스템을 운영하다 보면 어떤 반복적인 작업이 필요한 경우가 있다.
    반복적인 작업이 아니더라도 미래의 어느 시점에 어떤 작업이 수행될 수 있도록 하는 작업 예약 기능이 필요할 수도 있다.
    cron은 이러한 주기적인 반복 작업이나 예약 작업을 처리해 주는 데몬 프로세스로 프로그램 이름이 cron이다.

    cron은 시스템 초기화 과정에서 생성되어 /etc/crontab 파일과 /var/spool/cron 디렉터리 아래에 있는 파일들에서 작업 스케줄을 읽어 처리한다.

    systemctl을 사용해서 cron 데몬을 시작

    1
    2
    hjw@Desktop:~$ systemctl start cron
     
    cs

     

     

     

     

    # cron 사용자 제한

    cron과 관련된 작업은 주로 시스템 관리자인 root가 설정하지만, 일반 사용자도 cron을 사용할 수 있다.
    cron의 사용은 시스템 부하에 큰 영향을 줄 수 있기 때문에 일반 사용자의 cron 사용을 제한할 필요가 있다.

    사용자의 cron 사용 권한은 /etc/cron.allow 파일과 /etc/cron.deny 파일에 의해 제한된다.

    /etc/cron.allow 파일은 cron을 사용할 수 있는 사용자의 id를 저장하고 있고,
    /etc/cron.deny 파일은 cron을 사용할 수 없는 사용자의 id를 저장하고 있다.


    사용자 제한 원칙

    /etc/cron.allow 파일이 존재하고 /etc/cron.deny 파일이 존재하지 않으면, /etc/cron.allow 파일 안에 사용자 id가 있는 사용자만 cron을 사용할 수 있다.

    /etc/cron.allow 파일이 존재하지 않고 /etc/cron.deny 파일이 존재하면, /etc/cron.deny 파일 안에 사용자 id가 없는 사용자만 cron을 사용할 수 있다.

    두 파일이 모두 존재하면 /etc/cron.deny 파일에 id가 존재하지 않고, /etc/cron.allow 파일에 id가 존재하는 사용자만 cron을 사용할 수 있다.

    두 파일이 모두 존재하지 않으면 시스템 설정에 따라 다르지만, 보통은 누구나 cron을 사용할 수 있다.

     

     

     

     

    # crontab 파일

    crontab 파일
       /etc/crontab 파일은 시스템 예약 작업을 처리하기 위한 것으로 각 라인은 다음과 같은 구조로 되어 있다.

     

       min hour day mon weekday user command
     
       min : 분 단위 (0 ~ 59)
       hour : 시간 단위 (0 ~ 23)
       day : 일 단위 (0 ~ 31)
       mon : 월 단위 (0 ~ 12)
       weekday : 요일 단위 (0 ~ 7, 0과 7은 일요일))
       user : 프로그램을 실행시킬 사용자
       command : 실행시킬 명령

     

    각 필드에는 다음과 같은 특수 문자들을 사용할 수 있다.
       * : 전체를 의미한다. 예를 들어 day 필드가 ‘*’이면 ‘매일’을 뜻한다.
       - : 범위를 나타낸다. 예를 들어 day 필드가 3-5이면, 3일과 4일, 5일을 나타낸다.
       , : 여러 값을 나타낼 때 사용. 예를 들어 day 필드에 3,4,5가 있으면 3일과 4일, 5일을 나타낸다.
     

    /etc/crontab은 원래 모든 예약 작업들의 정보를 저장하기 위한 목적으로 사용되었으나, 리눅스는 이를 시스템 예약 작업용으로만 사용하고, 사용자의 예약 작업은 /var/spool/cron 디렉터리를 이용한다.

    /etc/crontab에는 시스템의 예약 작업들이 들어 있다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    hjw@Desktop:~$ cat /etc/crontab
    # /etc/crontab: system-wide crontab
    # Unlike any other crontab you don't have to run the `crontab'
    # command to install the new version when you edit this file
    # and files in /etc/cron.d. These files also have username fields,
    # that none of the other crontabs do.
     
    SHELL=/bin/sh
    PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
     
    # 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
    17 *    * * *    root    cd / && run-parts --report /etc/cron.hourly
    25 6    * * *    root    test -/usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
    47 6    * * 7    root    test -/usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
    52 6    1 * *    root    test -/usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
    #
     
    cs

     

     

     

     

    # /etc/crontab의 시스템 예약 작업 4종류

    (1) 매시 수행할 작업
       /etc/cron.hourly 디렉터리 아래의 모든 실행 파일들은 매시 17분에 자동으로 수행된다.
     
    (2) 매일 수행할 작업
       /etc/cron.daily 디렉터리 아래의 모든 실행 파일들은 매일 6시 25분에 자동으로 수행된다.
     
    (3) 매주 수행할 작업
       /etc/cron.weekly 디렉터리 아래의 모든 실행 파일들은 매주 7일째(일요일) 6시 47분에 자동으로 수행된다.
     
    (4) 매월 수행할 작업
       /etc/cron.monthly 디렉터리 아래의 모든 실행 파일들은 매월 1일 6시 52분에 자동으로 수행된다.

     

     

     

     

    # 일반 사용자의 예약 작업

    일반적인 예약 적업은 /var/spool/cron 디렉터리 아래에 사용자 id와 같은 이름의 파일에 저장한다.

    crontab 명령은 일반 사용자 예약 작업과 관련된 기능을 수행한다.

    형식 crontab
    기능 crontab 파일의 편집
    옵션 -l : 사용자의 예약 작업 정보를 출력
    -r : 사용자의 예약 작업들을 모두 삭제
    -e : 사용자의 예약 작업을 편집

     

    crontab -e 명령을 실행하면 vi 에디터 화면이 나타나는데, 여기에서 예약 작업을 편집하면 된다.

    이때 각 라인은 /etc/crontab 파일의 라인과는 달리 user 필드가 없다.

     

    crontab -e로 입력할 내용은 다음과 같은 구조를 가진다.

    min hour day mon weekday command

     

     

    crontab -e 명령을 실행하면 vi 에디터 화면이 나타나는데, 여기에서 예약 작업을 편집하면 된다. 이때 각 라인은 /etc/crontab 파일의 라인과는 달리 user 필드가 없다.

    crontab -e로 입력할 내용은 다음과 같은 구조를 가진다.

     

    min hour day mon weekday command

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    hjw@Desktop:~/work/ch7$ crontab -e
    crontab: installing new crontab
    hjw@Desktop:~/work/ch7$ crontab -l
    54 * * * * date >> /home/hjw/work/ch7/aaaa
    54 * * * * date >> /home/hjw/work/ch7/aaaa
    hjw@Desktop:~/work/ch7$ ls
    aaaa  myDaemon.sh  timeout  whoout
    hjw@Desktop:~/work/ch7$ cat aaaa
    Sat 05 Jun 2021 11:54:01 PM PDT
    Sat 05 Jun 2021 11:54:01 PM PDT
     
    cs

     

    crontab -r 하면 작성한 예약 작업 삭제.

     

     

    'Computer Science > Linux' 카테고리의 다른 글

    파일 시스템 관리  (0) 2021.06.06
    네트워크 설정과 관리  (0) 2021.06.05
    시스템 관리 (3)  (0) 2021.06.05
    시스템 관리 (2)  (0) 2021.06.01
    시스템 프로그래밍 C.2  (0) 2021.05.28

    댓글