본문 바로가기
네이버클라우드/Linux

Linux 6일차 (2023-05-01) Linux System 관리 - 예약작업(atd), 반복작업(crond)

by prometedor 2023. 5. 1.

예약작업(atd), 반복작업(crond)

atd (예약작업), at, atq, atrm

그날의 특정 시간에 작업을 수행하기 위해 HH:MM 형식으로 시간을 지정
(만약 시간이 이미 지났다면 다음날로 생각함)

midnight, noon, 또는 teatime (4pm) 문자와 아침 또는 저녁을 나타내기 위해
AM 또는 PM 과 같은 접미사를 사용할 수 있음

작업을 수행할 날짜에 대해서 month-name day year 형식으로 지정하거나 
MMDDYY 또는 MM/DD/YY 또는 DD.MM.YY 형식으로 지정할 수 있음

날자 지정은 반드시 시간 지정 다음에 나와야 함

시간을 now + count time-units 형식으로 지정할 수 있으며,
time-units 은 minutes, hours, days 또는 weeks 가 될 수 있음

오늘 수행할 작업에는 today 를, 내일 수행할 작업에는 tomorrow 를 붙일 수 있음

 

root@ysy:~# ai at
root@ysy:~# ai cron

ㄴ at, cron 설치 

 

root@ysy:~# systemctl start atd
root@ysy:~# systemctl status atd
● atd.service - Deferred execution scheduler
     Loaded: loaded (/lib/systemd/system/atd.service; enabled; vendor preset: en>
     Active: active (running) since Mon 2023-05-01 18:51:23 KST; 3min 49s ago
       Docs: man:atd(8)
    Process: 5752 ExecStartPre=find /var/spool/cron/atjobs -type f -name =* -not>
   Main PID: 5753 (atd)
      Tasks: 1 (limit: 2233)
     Memory: 268.0K
        CPU: 2ms
     CGroup: /system.slice/atd.service
             └─5753 /usr/sbin/atd -f

May 01 18:51:23 ysy systemd[1]: Starting Deferred execution scheduler...
May 01 18:51:23 ysy systemd[1]: Started Deferred execution scheduler.
lines 1-14/14 (END)

ㄴ atd 시작 후 상태 보기

 

root@ysy:~# at now +3 min  --> 3분 후 예약작업
warning: commands will be executed using /bin/sh
at Mon May  1 18:59:00 2023
at> reboot  --> 시스템 재부팅
at> <EOT>  --> ^D (ctrl + D)
job 1 at Mon May  1 18:59:00 2023

ㄴ 예약작업 하는 방법 --> at now +3 min

 

root@ysy:~# atq  --> 예약작업 목록 보기
1       Mon May  1 18:59:00 2023 a root

root@ysy:~# atrm 1  --> 예약작업 지우기

ㄴ 예약작업 목록 보기 및 지우기

ㄴ 예약작업 목록 보기 --> atq

ㄴ 예약작업 선택 지우기 --> atrm 작업번호

 

at 의 사용자 제어
/etc/at.deny 설정 파일을 이용하여 사용자에 대한 예약 작업 제어

#vi /etc/at.deny  --> 권한 불허

 

 

예약작업 시 참고 사항

HH:MM  --> H : Hour / M : Minute
midnight  --> 자정
noon  --> 정오
teatime  --> 4pm
month-name day year
MMDDYY, MM/DD/YY, DD.MM.YY
now + count time-units
time-units ==> minutes, hours, days, weeks
today
tomorrow


>> 실제 예제
#at 09:10
#at 23:15
#at 3am
#at 3pm
#at noon
#at midnight
#at teatime

#at may 23 2023
#at 05012023
#at 05.01.2023
#at 05/01/2023

#at now + 3hours
#at now + 3min
#at now + 2weeks
#at now + 2days
#at now + 7days

 

 

**추가 : 스크립트 파일 지정하여 예약 작업하기

root@ysy:~# cat > a2.sh  --> 스크립트 파일 생성
date
cal
reboot
root@ysy:~# nl a2.sh
     1  date
     2  cal
     3  reboot
root@ysy:~# at now + 4 min -f a2.sh  --> 4분 후 스크립트 파일 실행 / -f : 파일 지정
warning: commands will be executed using /bin/sh
job 5 at Mon May  1 11:15:00 2023

 

 

 

crontab(반복작업)

root@ysy:~# vi /etc/crontab

 

/etc/cron.d
주기적인 작업을 등록하는 공간으로 사용
임의의 사용자 건한으로 실행할 수 있음

cron 의 사용자 제어
/etc/cron.deny 설정 파일을 이용하여 사용자에 대한 crontab 제어

 

crontab 명령

#crontab -e  --> edit, crontab 파일의 내용 편집
#crontab -l  --> list, 현재 crontab 내용 표준 출력
#crontab -r  --> remove, 현재 crontab 내용 삭제
#crontab -u j --> j 사용자의 작업 내용을 보거나, 편집, 삭제

 

cronttab 을 활용한 주기적으로 백업

#today=`date + %y%d%m`
#00 3 * * * crontab -l > /backup/crontab_backup.$today

 

crontab -e             // 설정 하기

root@ysy:~# crontab -e
no crontab for root - using an empty one

Select an editor.  To change later, run 'select-editor'.
  1. /bin/nano        <---- easiest
  2. /usr/bin/vim.basic
  3. /usr/bin/vim.tiny
  4. /bin/ed
  Choose 1-4 [1]: 2

ㄴcrontab -e 이용하여 반복작업 설정하기

 

=> 아래와 파일에서 수정해 주면 됨

ㄴ 매 분마다 date 실행 값을 1date 라는 파일에 저장

 

ㄴ 5분 후 1date 파일 보기

 

 

ex) 또 다른 예시

#매 분 마다 실행
* * * * * /root/day.sh

#매 분 마다 실행
* * * * * date >> ~/1date

#특정 시간 실행 - 매주 토요일 오전 2시 30분
30 2 * * 6 /root/time2.sh

#반복 - 매일 매 시 10분, 30분, 50분
10,30,50 * * * * /root/time3.sh

#범위 - 매일 3시부터 3시 20분까지 매 분
0-20 3 * * * /root/time4.sh



// 주의할 것 - error
*/15 * * * * *
/root/time5.sh  --> 내려쓰면 안 됨