리눅스 시스템 작업 진행시 배치잡 또는 예약된 작업을 스케줄로 관리가 필요한 상황(백업, 정기적인 작업)이 있습니다. 이때 cron과 at을 이용하여 예약된 작업을 등록하고 실행을 하게 됩니다. 이번 포스팅에서는 cron과 at 사용법에 대해 설명을 드리고자 합니다. 이 둘의 차이점을 명확히 아시고, 사용하시면 효율적인 작업 스케줄 작업 운영이 가능할 것입니다.
Ⅰ. cron 사용법
Ⅱ. at 사용법
▷ cron은 주기적으로 반복되는 일을 자동으로 실행할 수 있도록 시스템 작업을 예약해 놓은 것을 의미
→ cron 데몬(서비스) : crond
→ cron 설정 파일 : /etc/crontab
→ cron 관련 디렉터리 : /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly, /etc/cron.monthly
▷ /etc/crontab 형식
→ crontab 파일을 열어보면 사용 예제가 주석으로 처리가 되어 있음
# crontab 설명
[root@localhost cron.hourly]# cat /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
▷ crontab 사용 예시
# crontab 등록
[root@localhost etc]# crontab -e
# 매월 1일 5시에 root 계정으로 /home 디렉터리를 /backup 디렉터리로 복사
00 05 1 * * root cp -r /home /backup
# 매월 1일 5시에 root 계정으로 backup.sh 스크립트 실행
00 05 1 * * root /root/backup.sh
# 매일 3시에 root 계정으로 crontab 백업
00 03 * * * root crontab -l > /root/backup_cron_`date +"%G%m%e%H%M"`.txt
# test02 계정의 crontab 등록
[root@localhost etc]# crontab -e -u test02
# 매시 05분, 35분에 test02 계정으로 every_30min.sh 스크립트 실행
05,35 * * * * test02 /test02/every_30min.sh
# 매시 10분마다 test02 계정으로 every_10min.sh 스크립트 실행
*/10 * * * * test02 /test02/every_10min.sh
# 매일 6시간마다 test02 계정으로 every_6hour.sh 스크립트 실행
00 */6 * * * test02 /test02/every_6hours.sh
# 주중 월~금 8시 test02 계정으로 /root/weekday.sh 스크립트 실행
0 8 * * 1-5 test02 /test02/weekday.sh
# 주말(토,일) test02 계정으로 /root/weekend.sh 스크립트 실행
0 8 * * 0,6 test02 /test02/weekend.sh
▷ crontab 등록 후 적용 방법
→ crontab 등록 또는 수정 후 반드시 cron 데몬을 재시작
# crontab 시스템 적용
[root@localhost etc]# systemctl restart crond
▷ crontab 작업 목록 확인과 삭제
# root 계정의 crontab 리스트 확인
[root@localhost etc]# crontab -l
00 05 1 * * root cp -r /home /backup
00 05 1 * * root /root/backup.sh
00 03 * * * root crontab -l > /root/backup_cron_`date +"%G%m%e%H%M"`.txt
# test02 계정의 crontab 리스트 확인
[root@localhost etc]# crontab -l -u test02
05,35 * * * * test02 /test02/every_30min.sh
*/10 * * * * test02 /test02/every_10min.sh
00 */6 * * * test02 /test02/every_6hours.sh
0 8 * * 1-5 test02 /test02/weekday.sh
0 8 * * 0,6 test02 /test02/weekend.sh
# root 계정의 crontab 삭제
[root@localhost etc]# crontab -r
[root@localhost etc]# crontab -l
no crontab for root
# test02 계정의 crontab 삭제
[root@localhost etc]# crontab -r -u test02
[root@localhost etc]# crontab -l -u test02
no crontab for test02
▷ at 은 1회성 예약 작업을 등록하는 것으로 한번 실행되면 소멸되는 방식
▷at 사용법
→ echo 명령어 | at 시간
→ at 시간 > 명령어 > 명령어 > ... > <EOT>
→ at 시간 -f 실행파일
▷ at 사용 예시
# at 등록 예시 1
[root@localhost etc]# echo yum update -y | at 01:00
warning: commands will be executed using /bin/sh
job 6 at Fri Oct 16 01:00:00 2020
# at 등록 예시 2
[root@localhost etc]# at 02:00
warning: commands will be executed using /bin/sh
at> yum update -y
at> ctrl+d
job 7 at Fri Oct 16 02:00:00 2020
# at 등록 예시 3
[root@localhost etc]# at 03:00 -f /root/update.sh
warning: commands will be executed using /bin/sh
job 8 at Fri Oct 16 03:00:00 2020
▷ at 등록 확인과 삭제
# at 등록 확인
[root@localhost etc]# at -l
6 Fri Oct 16 01:00:00 2020 a root
7 Fri Oct 16 02:00:00 2020 a root
8 Fri Oct 16 03:00:00 2020 a root
# at 삭제
[root@localhost etc]# atrm 6
[root@localhost etc]# at -l
7 Fri Oct 16 02:00:00 2020 a root
8 Fri Oct 16 03:00:00 2020 a root
▽ 같이 보면 더 좋은 블로그 글 ▽
[CentOS 8] 네트워크 관리 명령어 (0) | 2020.10.26 |
---|---|
[CentOS 8] 시스템 시간 동기화 chrony (0) | 2020.10.16 |
[CentOS 8] 파일 검색 (find, which, whereis) (0) | 2020.10.13 |
[CentOS 8] 파일 압축과 해제 (1) | 2020.10.12 |
[CentOS 8] 심볼릭 링크와 하드 링크 (0) | 2020.10.08 |
댓글 영역