Hướng dẫn sử dụng lệnh at để lên lịch chạy tác vụ chỉ một lần tại thời điểm xác định trong tương lai – khác với cron (chạy lặp lại định kỳ).
Kiểm tra và khởi động at daemon (atd)
# ps -ef | grep atd
# Nếu chưa chạy:
# systemctl start atd # systemd
# /etc/init.d/atd start # SysVinit cũ
Cú pháp cơ bản
# at -f script.sh -v 18:30
- -f script.sh: File script/command cần chạy.
- -v 18:30: Thời gian chạy (giờ:phút).
- Sau khi chạy xong, lịch trình tự động xóa (chạy một lần).
Định dạng thời gian tự nhiên (Natural Language) – Điểm mạnh của at
# at -f script.sh 10pm tomorrow
# at -f script.sh 2:50 tuesday
# at -f script.sh 6:00 july 11
# at -f script.sh 2:00 next week
# at -f script.sh now + 2 hours
# at -f script.sh teatime # 16:00
# at -f script.sh noon # 12:00
# at -f script.sh midnight # 00:00
Nhập lệnh tương tác (không cần file script)
# at 23:00
at> /usr/bin/backup.sh
at> echo "Backup done" | mail -s "Backup" admin@example.com
at> Ctrl+D (EOT) để kết thúc
Quản lý hàng đợi at
| Lệnh | Chức năng |
atq hoặc at -l | Liệt kê các job đang chờ |
at -c <job_number> | Xem nội dung job |
atrm <job_number> hoặc at -d <job_number> | Xóa job |
at -q <queue> | Sử dụng hàng đợi khác (a-z, A-Z), mặc định 'a' |
So sánh at vs cron
| Đặc điểm | at | cron |
| Tần suất | Một lần | Lặp lại định kỳ |
| Cú pháp thời gian | Tự nhiên (tomorrow, 5pm...) | Cron expression (phút giờ ngày tháng thứ) |
| Phù hợp | Backup lần, khởi động script sau giờ hành chính, nhắc nhở | Backup hàng ngày, dọn log, đồng bộ định kỳ |
| Lưu trữ | /var/spool/at/ | /etc/crontab, /etc/cron.d/, /var/spool/cron/ |
Kiểm soát truy cập at
/etc/at.allow: Chỉ user trong file này được dùng at (ưu tiên cao hơn).
/etc/at.deny: User trong file này KHÔNG được dùng at (mặc định thường rỗng → cho phép tất cả).
- Root luôn được phép.
Ví dụ thực tế
# Khởi động lại dịch vụ lúc 02:00 sáng mai (khi ít traffic)
echo "systemctl restart nginx" | at 02:00 tomorrow
# Gửi nhắc nhở email
echo "Meeting in 1 hour" | at now + 50 minutes