Trên hệ điều hành CentOS 7, công cụ phổ biến nhất để thiết lập tác vụ định kỳ là crontab. Ngoài ra còn có hai phương pháp khác là at và anacron, tuy nhiên mỗi phương pháp phù hợp với các trường hợp sử dụng riêng:
at: Dùng để thực thi lệnh một lần duy nhất. Yêu cầu dịch vụatdđang chạy.crontab: Cho phép lập lịch lặp lại theo chu kỳ (phút, giờ, ngày...). Cần dịch vụcrondhoạt động.anacron: Chỉ hỗ trợ chu kỳ theo ngày và có khả năng chạy bù các tác vụ bị lỡ do hệ thống tắt.
Mối quan hệ giữa crontab và crond
crond là một daemon (tiến trình nền) chịu trách nhiệm kiểm tra và thực thi các tác vụ định kỳ mỗi phút một lần. Trong khi đó, crontab là công cụ dòng lệnh cho phép người dùng tạo, chỉnh sửa hoặc xóa các tác vụ này. Do cách hoạt động của crond, không thể thiết lập lịch chạy theo giây.
Các lệnh thường dùng
Quản lý dịch vụ crond
systemctl start crond # Khởi động dịch vụ
systemctl stop crond # Dừng dịch vụ
systemctl restart crond # Khởi động lại
systemctl reload crond # Tải lại cấu hình
systemctl status crond # Kiểm tra trạng thái
Quản lý tác vụ với crontab
crontab -u username -e # Chỉnh sửa tác vụ cho người dùng cụ thể (chỉ root)
crontab -l # Liệt kê các tác vụ hiện tại
crontab -e # Chỉnh sửa tác vụ của người dùng hiện tại
crontab -r # Xóa tất cả tác vụ
crontab -i # Xóa với xác nhận
Hai cách cấu hình cron
1. Qua file /etc/crontab
Đây là file cấu hình hệ thống, chỉ có root mới có quyền sửa. Cấu trúc bao gồm thêm trường user-name:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# Ví dụ:
0 2 * * * root /root/mysqlbak/mysqlBackup.sh >> /root/mysqlbak/aa.txt
Dòng trên nghĩa là: vào lúc 2 giờ sáng hàng ngày, người dùng root sẽ chạy script sao lưu và ghi log ra file.
2. Qua lệnh crontab -e
Mọi người dùng đều có thể dùng lệnh này để quản lý tác vụ cá nhân. File được lưu tại /var/spool/cron/username. Cú pháp không có trường tên người dùng:
50 1 * * * /opt/backup.sh
So sánh
/etc/crontabcho phép chỉ định người dùng thực thi và môi trường shell.crontab -eđơn giản hơn, dành cho người dùng thường.- Cả hai phương pháp đều không yêu cầu khởi động lại
crondsau khi thay đổi.
Ví dụ: Lên lịch tắt máy lúc 22:01 hàng ngày
Cách 1 (dành cho root):
su - root
crontab -e
# Thêm dòng:
01 22 * * * /sbin/shutdown -h now
Cách 2 (sửa file hệ thống):
vi /etc/crontab
# Thêm dòng:
01 22 * * * root /sbin/shutdown -h now
Lưu ý về quyền thực thi
Nếu tác vụ gọi đến script, cần cấp quyền thực thi:
chmod +x /opt/mysqlBackup.sh
Giám sát và gỡ lỗi
Nhật ký thực thi cron được ghi tại:
/var/log/cron– dùngtail -f /var/log/cronđể theo dõi trực tiếp./var/spool/mail/root– chứa đầu ra tiêu chuẩn (stdout/stderr) nếu không chuyển hướng.