at과 batch
cron은 반복 작업에 강합니다. 매일, 매주, 매시간 실행하는 작업이라면 cron이 맞습니다. 그런데 딱 한 번만 실행하면 되는 작업이라면 어떨까요?
"지금부터 30분 후에 서버를 재시작해줘." "오늘 밤 11시 정각에 데이터베이스 마이그레이션 실행해줘."
이럴 때는 at을 씁니다.
at 명령어
at은 지정한 시간에 명령을 한 번 실행합니다. cron처럼 반복하지 않습니다.
Ubuntu에서 at이 설치되어 있지 않다면 먼저 설치합니다.
sudo apt install atsudo systemctl enable --now atd
기본 사용법.
# 5분 후 실행at now + 5 minutes# 1시간 후 실행at now + 1 hour# 오늘 오후 3시에 실행at 3:00 PM# 특정 날짜와 시간에 실행at 09:00 AM 2026-05-01# 내일 자정에 실행at midnight tomorrow
at 명령을 실행하면 프롬프트가 at>로 바뀝니다. 실행할 명령을 입력하고 Ctrl+D로 마칩니다.
$ at now + 5 minuteswarning: commands will be executed using /bin/shat Mon Apr 24 09:15:00 2026at> /home/ubuntu/scripts/backup.sh >> /var/log/backup.log 2>&1at> <EOT>job 1 at Mon Apr 24 09:15:00 2026
파이프로 명령을 전달하는 방법도 있습니다.
echo "/home/ubuntu/scripts/backup.sh >> /var/log/backup.log 2>&1" | at now + 5 minutes# 스크립트 파일 전체를 at에 넘기기at now + 1 hour < /home/ubuntu/scripts/maintenance.sh
예약 작업 확인과 삭제
# 예약된 작업 목록 확인atq# 특정 작업 내용 확인 (작업 번호 2번)at -c 2# 예약 삭제 (작업 번호 2번)atrm 2
atq 실행 결과는 이런 형태입니다.
2 Mon Apr 24 09:15:00 2026 a ubuntu
3 Mon Apr 24 23:00:00 2026 a ubuntu
왼쪽 숫자가 작업 번호입니다. atrm 2로 2번 작업을 삭제할 수 있습니다.
batch 명령어
batch는 at과 비슷하지만 한 가지 차이가 있습니다. 시스템 부하(load average)가 낮아졌을 때 실행합니다. 기본 임계값은 0.8입니다.
# 시스템이 한가해질 때 실행batchat> /home/ubuntu/scripts/heavy_task.sh >> /var/log/heavy.log 2>&1at> <EOT>
CPU를 많이 쓰는 작업을 시스템이 바쁘지 않을 때 실행하고 싶을 때 유용합니다. 시간을 정확히 맞출 필요는 없고, 그냥 한가할 때 돌리면 되는 작업에 적합합니다.
at vs cron 비교
| 항목 | at | cron |
|---|---|---|
| 실행 횟수 | 1회 | 반복 |
| 시간 지정 | 절대/상대 시간 | 주기 패턴 |
| 사용 사례 | 일회성 예약 | 정기 반복 |
| 설정 방법 | 명령어 입력 | 파일 편집 |
| 실행 후 | 작업 목록에서 제거 | 계속 유지 |
실습: 서버 재시작 예약과 새벽 배치 작업 예약
실습 1. 10분 후 알림 예약.
echo "notify-send '점검 시작' '서버 점검을 시작합니다.' 2>/dev/null || echo '점검 시작'" | at now + 10 minutes
실습 2. 오늘 밤 11시 데이터베이스 마이그레이션 예약.
cat << 'EOF' | at 11:00 PM#!/bin/bashLOG="/var/log/migration.log"echo "$(date) - 마이그레이션 시작" >> "$LOG"# 실제 마이그레이션 명령# python manage.py migrate >> "$LOG" 2>&1echo "$(date) - 마이그레이션 완료" >> "$LOG"EOF
실습 3. 예약 확인 후 취소.
# 예약 목록 확인atq# 가장 최근 예약 취소 (번호는 atq로 확인)atrm $(atq | tail -1 | awk '{print $1}')
실습 4. 새벽 배치 작업 예약 (내일 새벽 3시).
at 03:00 AM tomorrow << 'EOF'/home/ubuntu/scripts/weekly_report.sh >> /var/log/weekly_report.log 2>&1EOF
예약이 잘 됐는지 확인합니다.
atq
결과 예시입니다.
4 Tue Apr 25 03:00:00 2026 a ubuntu
내일 새벽 3시에 한 번 실행되고, 이후 자동으로 삭제됩니다.