Notice
Recent Posts
Recent Comments
Link
«   2026/04   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
Archives
Today
Total
관리 메뉴

bbbb's blog

[linux] 작업 스케줄링 본문

SE/linux

[linux] 작업 스케줄링

bbbb56146 2022. 1. 17. 17:29

작업 스케줄링

단일성 작업 예약

at

  • 단일성 작업 예약 도구
  • 시스템 데몬 atd로 프로세스 제어
  • at는 백그라운드에서 동작, 제어 터미널 x

at 사용을 위한 선행작업

yum -y install at
systemctl status atd
systemctl start atd
systemctl status atd # running 확인

at를 사용한 파일 생성

at now +1min #현재 시간부터 1분뒤 실행
at> echo "test" > text.txt #작업 입력
at> <EOT> #cntl+D, 직접 입력하는 것이 아님. (at 입력 끝)

기준 시간이 될 수 있는 문자열 at 예제

at teatime tomorrow #내일 오후 4시에 실행. teatime은 16시을 의미한다
at noon +4 days #4일뒤 정오에 실행
at 5pm august 3 2022 #정확한 날짜에 맞춰서 예약 가능 2022년 8월 3일 오후 5시

작업 예약 확인

at -l
2       Tue Jan 18 16:00:00 2022 a root
3       Fri Jan 21 12:00:00 2022 a root
4       Wed Aug  3 17:00:00 2022 a root

예약 작업 제거

atrm 2 #작업 번호로 제거
at -l
3       Fri Jan 21 12:00:00 2022 a root
4       Wed Aug  3 17:00:00 2022 a root

주기적인 작업 예약

  • 예약된 작업을 반복 실행
  • crond 데몬이 작업을 제어(crontab 구성 파일을 해석해서)

crontab 파일 확인

vim /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# 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

* * * * * root echo "test" > test.txt 
#root 사용자가 echo "test" > test.txt 실행
#매분 매시 매일 매월 매요일마다 실행 -> 1분마다 계속 실행
#현재 시간을 기준으로 실행(지금부터)
#분자리에 *가 표기될 경우 현재 시간 기준

* * * * * user1 echo "test" > test.txt 
#/home/user1 디렉토리에서 echo "test" > test.txt 실행
#매분 매시 매일 매월 매요일마다 실행 -> 1분마다 계속 실행

0 1 * * * root echo "test" > test.txt 
#매일 오전 1시에 실행

0 1 * * 0 root echo "test" > test.txt 
#매월 매일 일요일 오전 1시 0분에 실행

0 1 1 * 0 root echo "test" > test.txt 
#매월 1일 일요일 오전 1시에 실행 (1일이 월요일이면 실행 x)

0 1 1 2 0 root echo "test" > test.txt
#2월 1일 일요일 오전 1시에 실행

0/3 1 * * * root echo "test" > test.txt
#2월 1일 일요일 오전 1시에 3분 마다 실행 (01:00 ~ 01:59)
#2시가 되면실행 x

# * 1 * * * 이면?
# 매월 매일 매요일마다 1시 매분마다 명령어 실행
# 분에 * 표시가 되어있을 경우 *(/1)

crontab

  • 일반 사용자의 경우 crontab 명령어 사용
crontab -e 
  • 반복작업 생성
  • /etc/crontab에 작성하는 것과 똑같이 작성하면 됨
  • 반복작업 제거도 가능(vim과 같은 형식)

반복 작업 예약 확인

crontab -l

모든 반복 작업 제거

crontab -r #모든 반복 작업 제거

/etc/cron.d

  • cron.d 디렉토리 밑에 반복 작업을 분류하여 생성 가능

/etc/anacrontab

  • 시스템이 꺼져 있거나 절전모들로 인해 실행되지 않을 경우 시스템이 준비되면 작업 실행
    ...
    #period in days   delay in minutes   job-identifier   command
    1       5       cron.daily              nice run-parts /etc/cron.daily
    7       25      cron.weekly             nice run-parts /etc/cron.weekly
    @monthly 45     cron.monthly            nice run-parts /etc/cron.monthly​
  1.  기간(일)
    • @daily는 정수 1과 동일, 매일 실행 됨을 의미
    • @weekly는 정수 7과 동일, 매주 실행 됨을 의미
    • @monthly는 매달 실행 됨을 의미(달마다 일수가 다름)
  2. 지연 (분)
    • 시스템이 준비된 후 작업을 시작하기 전에 crond 데몬이 대기해야
      하는 시간
  3. 작업 식별자
    • 작업이 시작되는 고유 이름
  4. 명령
    • 실행할 명령

'SE > linux' 카테고리의 다른 글

[linux] ACL  (0) 2022.01.18
[linux] 파일 시스템  (0) 2022.01.17
[linux] 패키지 관리 도구  (0) 2022.01.17
[linux] SSH  (0) 2022.01.14
Comments