cron
cron
은 작업 스케줄러 데몬(demon)으로, 주기적으로 정해진 시간에 작업을 실행하는 역할
cron 데몬(demon)
은 분, 시간, 일, 월, 요일에 기반하여 주기적으로 작업을 실행
cron 데몬(demon)
은 백그라운드에서 실행되며, crontab
파일에 정의된 작업을 일정에 따라 실행
반복적인 작업, 예를 들어 매일 백업을 수행하거나 매주 리포트를 생성하는 작업에 적합
특징
- 시간 기반 스케줄링:
cron
데몬은 분, 시간, 일, 월, 요일에 기반하여 주기적으로 작업을 실행 - 백그라운드 실행:
cron
데몬은 백그라운드에서 실행되며,crontab
파일에 정의된 작업을 일정에 따라 실행 - 자동화에 적합: 반복적인 작업을 자동화하는 데 매우 적합
명령어
cron
서비스의 상태를 확인
sudo systemctl status cron
cron
서비스 시작
sudo systemctl start cron
cron
서비스 중지
sudo systemctl stop cron
cron
서비스 재시작 명령어
sudo systemctl restart cron
crontab
특정 작업을 예약하기 위한 설정 파일 또는 편집 도구
각 사용자는 자신의 crontab 파일을 통해 작업을 예약할 수 있으며, 이 파일은 cron
데몬에 의해 주기적으로 읽혀 실행
crontab
명령어를 사용하여 이 파일을 편집하거나, 작업을 추가/제거
명령어
- crontab 파일 편집
# 현재 사용자의 crontab 파일을 열어 편집합니다. crontab -e
- 현재 사용자의
crontab
파일을 열어 편집합니다.
# 현재 사용자의 예약된 작업 목록을 확인합니다. crontab -l
cron
로그 파일 저장
# 모든 cron 출력 로그를 파일에 저장 0 3 * * * /path/to/command.sh > /path/to/logfile.log 2>&1
- 모든 작업 제거
# 현재 사용자의 모든 예약 작업을 제거합니다. crontab -r
- 특정 사용자 작업 관리
# 특정 사용자의 crontab 파일을 편집합니다. sudo crontab -u [사용자명] -e
crontab 파일 형식
crontab
파일은 시간과 명령으로 구성된 간단한 텍스트 파일
각 행은 특정 시간에 실행할 명령을 정의
기본 형식
# 분 시 일 월 요일 사용자 명령어 * * * * * 사용자 명령어
- 분 (0-59): 실행할 분을 지정
- 시 (0-23): 실행할 시각을 지정
- 일 (1-31): 실행할 일을 지정
- 월 (1-12): 실행할 월을 지정
- 요일 (0-7): 실행할 요일을 지정 (0 또는 7은 일요일)
- 사용자: 명령어를 실행할 사용자
- 명령어: 실제 실행할 명령어
- 매일 오후 2시에 스크립트 실행
0 14 * * * /path/to/script.sh
- 매년 특정 날짜와 시간에 시스템 재부팅
0 0 1 1 * /sbin/reboot # 매년 1월 1일 자정에 시스템 재부팅
- 매주 월요일 오전 3시에 로그 정리
0 3 * * 1 /usr/bin/logrotate /etc/logrotate.conf
- 매월 1일 자정에 시스템 백업
0 0 1 * * /usr/local/bin/backup.sh # backup.sh 예시 #!/bin/bash # 백업 대상 디렉터리 SOURCE_DIR="/home/user/data" # 백업 저장 디렉터리 BACKUP_DIR="/backup" # 백업 파일 이름 (날짜 포함) BACKUP_FILE="$BACKUP_DIR/backup_$(date +%Y-%m-%d).tar.gz" # 로그 파일 경로 LOG_FILE="/var/log/backup.log" # 로그 기록 시작 echo "Backup started at $(date)" >> $LOG_FILE # 디렉터리 존재 여부 확인 if [ ! -d "$SOURCE_DIR" ]; then echo "Source directory $SOURCE_DIR does not exist. Backup failed." >> $LOG_FILE exit 1 fi # 백업 저장 디렉터리 생성 (없으면 생성) mkdir -p $BACKUP_DIR # 백업 실행 (압축) tar -czf $BACKUP_FILE $SOURCE_DIR if [ $? -eq 0 ]; then echo "Backup completed successfully. File: $BACKUP_FILE" >> $LOG_FILE else echo "Backup failed at $(date)" >> $LOG_FILE exit 1 fi # 로그 기록 종료 echo "Backup finished at $(date)" >> $LOG_FILE # 정상 종료 exit 0
/etc/crontab
크론(cron) 서비스와 관련된 중요한 시스템 파일로, 리눅스와 유닉스 시스템에서 주기적으로 실행되는 작업들을 관리하는 데 사용
이 파일은 시스템 전반의 스케줄링된 작업을 정의하고 있으며, 모든 사용자가 실행하는 주기적인 작업들을 관리할 수 있는 권한을 제공
/etc/crontab
은 시스템 관리자(root 사용자)가 설정한 전역적인 크론 작업을 정의할 때 사용
sudo vi /etc/crontab sudo vim /etc/crontab
at
at
명령어는 리눅스 및 유닉스 시스템에서 한 번만 실행되는 작업을 예약하는 데 사용
즉, 특정 시점에 단 한 번 실행되어야 할 작업을 예약할 수 있게 해주는 명령어
cron
과는 달리, at
은 주기적인 작업이 아니라 특정 시간에 한 번만 실행되는 작업을 설정할 때 사용
설치
sudo apt update sudo apt install at
명령어
at
서비스 시작
sudo systemctl start atd
at
서비스 확인
sudo systemctl status atd
- 시작 시 실행
sudo systemctl enable atd
at
서비스 중지
sudo systemctl stop atd
at
서비스 재시작
sudo systemctl restart atd
at
예약된 명령어 확인
at -l atq
at
예약된 작업 취소
atrm 작업ID # atrm 2
at 명령어 (시간 형식)
at
명령어는 기본적으로 실행할 명령어를 지정하는 것과 실행할 시간을 설정하는 것으로 구성
at [옵션] 시간
- 정확한 시간:
HH:MM
(24시간 형식)- 예:
14:30
(오후 2시 30분)
- 예:
- 날짜와 시간:
MM/DD/YYYY HH:MM
- 예:
12/25 15:00
(12월 25일 오후 3시)
- 예:
- 상대적인 시간: 현재 시간 기준으로 상대적인 시간을 지정
- 예:
now + 2 hours
(현재로부터 2시간 후) - 예:
now + 1 day
(현재로부터 하루 후) - 예:
now + 30 minutes
(현재로부터 30분 후)
- 예:
사용 예시
- 지정한 시간에 명령어 실행
# 15:00에 "Hello, World!"를 /tmp/hello.txt 파일에 작성하도록 예약 $ at 15:00 at> echo "Hello, World!" > /tmp/hello.txt at> <EOT> # CTRL + D 저장
- 현재로부터 2시간 후 실행
# 현재로부터 2시간 후에 특정 스크립트를 실행 $ at now + 2 hours at> /path/to/script.sh at> <EOT> # CTRL + D 저장
- 특정 날짜와 시간에 명령어 실행
# 12월 25일 오후 2시에 특정 스크립트를 실행 at 12/25 14:00 at> /path/to/script.sh at> <EOT> # CTRL + D 저장