본문으로 바로가기

스케줄링 관리

category Linux/Linux Server 2017. 9. 5. 19:56

정기적인 작업을 수행하는 경우 ( 스케줄링 )


  • at

at 데몬은 지정한 시간에 어떠한 작업이 실행될 수 있도록 작업 스케줄을 예약 처리해 주는 기능을 한다.


[실행]

# services atd restart


[명령어 형식]

# at TIME

# at -l  ( # atq ) /* 확인 */

# at -r ( # atrm )   /* 삭제 */


  • crontab 

cron 데몬은 같은 작업을 주기적으로 반복 실행되도록 하는 작업 스케줄용 데몬으로, 매분, 매시, 매일, 매주, 매월, 매요일 단위로 cron 데몬에 의해서 작업이 실행될 수 있다.

/etc/cron/daily 디렉토리안에는 여러 가지 스크립트들이 존재하는데, 매일 이들 스크립트는 cron 데몬에 의해서 자동적으로 실행된다.


[실행]

# service crond restart


[명령어 형식]

# crontab file

# crontab -e     /* -e : Edit */ ( # vi /var/spool/cron/<사용자이름> ) 

# crontab -l    /*-l : List*/ ( # cat /var/spool/cron/<사용자이름>)

# crontab -r   /* -r : Remove */ ( # rm /var/spool/cron/<사용자이름>)

 (주의) 삭제 명령어를 사용하면 모든 스케줄링이 삭제된다. 다른 사용자가 등록한 스케줄링도 모두 삭제된다. 


[crontab 파일 분석]

분    시    일    월   요일    CMD

0     3     *     *     *     /root/bin/backup.sh


(분) 0 - 59

(시) 0 - 23

(일) 1 - 31

(월) 1 - 12

(요일) 0 - 7  (0,7: 일요일, 1: 월요일, 2: 화요일)


분   시   일  월   요일   CMD

--------------------------------------------

0    3    *    *     *    /root/bin/backup.sh /* 매일 3시 00분에 실행 */

0  0,12   *    *     *    /root/bin/backup.sh /* 매일 0시 00분과 12시 00분에 실행 */

0    3    *    *     0    /root/bin/backup.sh /* 매주 일요일 3시 00분에 실행 */

0    3    *    *    1,3   /root/bin/backup.sh          /* 매주 월요일, 수요일 3시 00분에 실행 */

0    3    1    *     *    /root/bin/backup.sh /* 매월 1일 3시 00분에 실행 */

0    3   1,15  *     *    /root/bin/backup.sh /* 매월 1일 15일 3시 00분에 실행 */

0    3    1    3,6,9,12    *    /root/bin/backup.sh /* 3월 6월 9월 12월 1일 3시 00분에 실행 */

--------------------------------------------

0    3    1    *     0    /root/bin/backup.sh      

-> (X) 매월 1일이 일요일날일때만 3시00분 실행

-> (O) 매월 1일과 매주 일요일 3시 00분에 실행

--------------------------------------------


-매월 첫째주 일요일에 실행하게 하려면?

 -> crontab + script.sh

# crontab -l 

0    3    *    *    0    /root/bin/script.sh


# vi /root/bin/script.sh

----------------------------------

...... (중략) ....

DAY=`date +%d`


if [ $DAY -le 7 ] ; then

/root/bin/backup2.sh

fi

...... (중략) ....

-----------------------------------

-> date의 날짜만 추출하여 DAY에 넣고 DAY가 7(일)보다 작거나 같을때만 실행


[예] at 명령어의 실무예(at CMD)


# cat /root/bin/backup.sh 

-------------------------------------------------

(백업 스크립트 내용 예제)

cd /home

tar cvzf /backup/home.`date +%m%d`.tar.gz .

--------------------------------------------------


(현재)        # /root/bin/backup.sh                (# CMD)

(지정된 시간) # echo /root/bin/backup.sh | at 1200 (# echo CMD | at <시간>)


[예] 컴퓨터 끄기 예약

# at now +30 min       (# echo "shutdown -r now" | at now +30 min)

--------------------------------

at> shutdown -r now 

at> <CTRL + D> 

--------------------------------


- 특정 사용자만 crontab 명령어를 사용하게 하는 방법

-> at 명령어는 한번만 실행되고 종료되는 명령어이기 때문에 제한을 두지 않지만 crontab 명령어는 계속 실행되므로 아무나 사용하게 되어 잘못 사용되면 위험해 질 수 있다. ( 사용자가 부하가 많이 걸리는 CMD를 crontab에 올려둘경우 )


# ls -l /etc/cron.{deny,allow}    /* cron.deny 나 cron.allow이 있는지 알아본다 */

# cat /etc/cron.deny 

-> cron.deny 파일에 적힌 사용자 ID는 명령어를 사용할 수 없다. ( 한 줄당 하나의 ID )

# cat /etc/cron.allow

-> cron.allow 파일에 적힌 사용자 ID만 명령어를 사용할 수 있다.


[참고] 두개의 파일이 모두다 있고 두 파일 모두 user01이 포함된 경우

-> user01 사용자는 crontab 명령을 사용할 수 있다. 

cron.allow 파일이 있으면 .dney 파일은 확인하지 않는다.


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

raw 디스크 부팅시 자동 연결  (0) 2019.03.21
백업관리  (0) 2017.09.06
사용자 그룹 관리  (0) 2017.09.05
부팅과정  (0) 2017.09.04
Software 관리_Source file  (0) 2017.09.01