OS/Linux

[Linux] 스케줄링 관리 (at , cron)

728x90
반응형

at 스케줄링은 주로 프로그램을 특정시간에 한 번만 사용하고 싶을 때 이용한다.

cron 스케줄링은 프로그램을 특정 날짜나 시간,요일에 맞춰 주기적으로 사용하고 싶을 때 이용한다.

 

ex)  비 반복적인 업무 : 업데이트, 재부팅 -> at 스케줄링

      반복적인 업무 : 정기적으로 파일백업 -> cron 스케줄링

 

at 명령어

작업 선언
# at 1300
# at 10:00pm today

작업 확인
# at -l
# atq

작업 취소
# atrm N (N : Job ID)
# at -r N

- 비반복에 사용되는 명령어

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

- at가 설치되어 있지 않다면 yum을 이용해 설치하자 (아래참고)

- at 스케줄을 사용하기 위해서는 at 데몬이 작동하고 있어야 한다. (아래참고)

 

at 설치 & 데몬 재시작

yum install at
systemctl restart atd

 

[EX] at 선언하기

at 12:03
at> echo 1111 > /dev/pts/0
at> <EOT>
job 2 at Sat Oct 30 12:03:00 2021​

[EX] at -l //at 확인 (이미 출력한 것은 안나옴)

at -l
1       Sat Oct 30 12:03:00 2021 a root
2       Sat Oct 30 12:03:00 2021 a root​

 

 

crontab 명령어

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

/etc 디렉토리에 일,주,월,요일 단위 형태로 cron 디렉토리가 존재하며, 이들 디렉토리에는 작업 예약 스크립트들이 들어 있다. /etc/crondaily 디렉토리안에는 여러 가지 스크립트들이 존재하는데, 매일 이들 스크립트는 cron 데몬에 의해서 자동적으로 실행된다. 

cron을 이용한 스케줄링은 시스템운영에 필요한 작업과, 사용자에게 필요한 작업 두 가지로 나뉜다.

- 시스템 운영에 필요한 작업은 root 권한으로 /etc/crontab에 등록해서 수행할 수 있다.

- 사용자가 필요에 의해 지정하는 작업은 crontab 명령어를 통해 등록할 수 있다.

작업 선언
# crontab -e (-e : Edit, # vi /var/spool/cron/<사용자이름>)
# crontab -e -u user01

작업 확인
# crontab -l (-l : List, #cat /var/spool/cron/<사용자이름>)

작업 삭제
# crontab -r (주의) (-r : Remove, # rm /var/spool/cron/<사용자이름>)

*주의 

crontab은 에디터를 실행하면(crontab -e) 임시파일로 생성이 된다. 그리고 저장을 하는 순간 바로 적용되어 동작한다. 저장하고 빠져나가면 crontab: installing new crontab을 출력하며 바로 실행 시작한다.

 

cron 데몬 확인

systemctl status crond.service

 

cron 디렉토리 확인

find /etc | grep cron
/etc/crontab
/etc/cron.daily
/etc/cron.daily/logrotate
/etc/cron.daily/man-db.cron
/etc/systemd/system/multi-user.target.wants/crond.service
/etc/sysconfig/crond
/etc/anacrontab
/etc/cron.hourly
/etc/cron.hourly/0anacron
/etc/selinux/targeted/active/modules/100/cron
/etc/selinux/targeted/active/modules/100/cron/cil
/etc/selinux/targeted/active/modules/100/cron/hll
/etc/selinux/targeted/active/modules/100/cron/lang_ext
/etc/cron.d
/etc/cron.d/0hourly
/etc/cron.monthly
/etc/cron.weekly
/etc/pam.d/crond
/etc/cron.deny

 

스케줄링 주기 설정방법

   *           *             *            *          *
분(0-59) /시간(0-23) /일(1-31) /월(1-12) /요일(0-7)
각각의 필드는 설정값에 따라 시간, 월, 일단위로 쪼개서 스케줄링을 설정할 수 있다.
10, 20, 30 * * * * = 매시간 10분, 20분, 30분에 실행
0-30 10 * * *   = 매일 10시 0분 ~ 30분까지 매분 실행
* * 1 1-12/2 *  = 1~12월까지 2개월마다 1일날 매분 실행
10 * * * 1,3,5   = 월,수,금요일마다 매시간 10분에 실행
0 20 * * * /root/snapmk.sh  = 매일 오후 8시마다 실행
* 20 * * * /root/snapmk.sh  = 오후 8시에 매분 실행
00 09-18/1 * 5 1-5 /root/port_script.sh = 5월, 월-금 ,09시~18시 까지 1시간마다 실행

 

 

Cron 로그 확인 방법

#Ubuntu crontab 로그 확인
grep CRON /var/log/syslog
728x90
728x90