Cron và Tác Vụ Định Kỳ
You've reached the end
Bài cuối series. Bạn đã viết được script (Bài 16); giờ cho chúng tự chạy theo lịch — backup hằng đêm, dọn log hằng tuần, đồng bộ dữ liệu mỗi giờ — bằng cron. Sau đó ta tổng kết cả hành trình.
Lưu ý môi trường: giống systemd (Bài 15), cron là dịch vụ nền cần daemon chạy. Trong container thường, daemon cron không chạy mặc định (cài bằng
apt install cron, quản lý crontab được, nhưng job sẽ không tự kích hoạt cho tới khi dịch vụcronchạy). Thực hành đầy đủ nên dùng VM/server thật.
cron là gì
cron là dịch vụ chạy nền, đọc các "lịch" bạn khai báo và chạy lệnh đúng thời điểm. Lịch của mỗi user nằm trong một bảng gọi là crontab.
Cú pháp crontab: 5 trường thời gian
Mỗi dòng crontab gồm 5 trường thời gian + lệnh:
* * * * * lệnh-cần-chạy
│ │ │ │ │
│ │ │ │ └── thứ trong tuần (0-7; 0 và 7 đều là Chủ nhật)
│ │ │ └──── tháng (1-12)
│ │ └────── ngày trong tháng (1-31)
│ └──────── giờ (0-23)
└────────── phút (0-59)
* nghĩa là "mọi giá trị". Vài ví dụ đọc cho quen:
*/5 * * * * cứ mỗi 5 phút
0 * * * * đầu mỗi giờ (phút 0)
0 2 * * * 2 giờ sáng mỗi ngày
0 3 * * 0 3 giờ sáng Chủ nhật hằng tuần
30 0 1 * * 0:30 ngày 1 mỗi tháng
*/N nghĩa "mỗi N đơn vị". Nếu thấy rối, trang web crontab.guru (tra cứu, không cần cài) giúp đọc/viết lịch nhanh.
Quản lý crontab
crontab -e # mở crontab của bạn để sửa (bằng editor — Bài 4)
crontab -l # liệt kê crontab hiện tại
crontab -r # xóa toàn bộ crontab (cẩn thận!)
Ví dụ một dòng backup chạy mỗi 5 phút, ghi log:
*/5 * * * * /opt/backup.sh >> /var/log/backup.log 2>&1
Để ý phần >> /var/log/backup.log 2>&1 (nhớ Bài 6): cron chạy im lặng trong nền, nên bạn phải tự chuyển output và lỗi vào file log — nếu không, khi job lỗi bạn chẳng biết gì. Đây là mẫu gần như bắt buộc cho mọi cron job.
Các bẫy của cron (gây mất thời gian nhất)
cron chạy job trong một môi trường tối giản, khác hẳn shell tương tác của bạn. Đây là nguồn của hầu hết lỗi "chạy tay thì được, cron thì không":
- PATH tối thiểu: cron không có PATH đầy đủ như shell của bạn. Vì vậy luôn dùng đường dẫn tuyệt đối cho lệnh và file trong script chạy bằng cron (
/usr/bin/nodethay vìnode,/opt/app/datathay vìdata). - Không có biến môi trường của bạn: các biến trong
.bashrckhông có. Nếu script cần, khai báo thẳng trong script hoặc trong crontab. - Thư mục làm việc khác: cron chạy từ thư mục nhà của user, không phải nơi bạn nghĩ. Dùng
cdtường minh hoặc đường dẫn tuyệt đối. - Quên ghi log: thêm
>> file.log 2>&1để gỡ lỗi được.
Quy tắc vàng: script chạy bằng cron nên dùng đường dẫn tuyệt đối cho mọi thứ và tự ghi log.
Các crontab hệ thống và lối tắt
Ngoài crontab của user, hệ thống còn các thư mục /etc/cron.daily/, /etc/cron.weekly/... — đặt một script vào đó là nó chạy hằng ngày/tuần (cách phổ biến để thêm việc định kỳ cấp hệ thống). Và có các lối tắt thay cho 5 trường:
@daily /opt/backup.sh # tương đương 0 0 * * *
@hourly /opt/sync.sh
@reboot /opt/startup.sh # chạy một lần mỗi khi máy khởi động
at: chạy một lần trong tương lai
cron là định kỳ. Khi chỉ cần chạy một lần vào lúc nào đó, dùng at:
echo "/opt/task.sh" | at 23:00 # chạy lúc 23:00 hôm nay
echo "/opt/task.sh" | at now + 1 hour
cron hay systemd timer?
systemd (Bài 15) cũng lên lịch được bằng .timer unit. So với cron:
- cron — đơn giản, có ở mọi nơi, đủ cho phần lớn việc định kỳ.
- systemd timer — phức tạp hơn nhưng mạnh hơn: ghi log qua journalctl, phụ thuộc unit khác, chạy bù khi máy đã tắt qua mốc lịch (
Persistent=true).
Với người mới và phần lớn nhu cầu, cron là đủ và nhanh hơn để dùng.
🧹 Dọn dẹp
crontab -r # xóa các job thử nghiệm (nếu chỉ có job test)
Tổng kết series
Hết 18 bài, bạn đã đi từ "Linux là gì" tới tự động hóa công việc trên server:
- Nền tảng (Bài 0–3): môi trường thực hành, shell, cây thư mục FHS + "mọi thứ là file", thao tác file.
- Công cụ hằng ngày (Bài 4–6): editor (nano/vim), xử lý văn bản (grep/sed/awk), và deep-dive pipe/redirect/luồng dữ liệu.
- Hệ thống (Bài 7–10): deep-dive quyền (rwx), tiến trình & tín hiệu, nén (tar), quản lý đĩa.
- Quản trị (Bài 11–13): quản lý gói, user/group/sudo, mạng.
- Server thật (Bài 14–17): SSH & truyền file, systemd, shell scripting, cron.
Vài ý xuyên suốt đáng giữ:
- Mọi thứ là file — đọc tiến trình, thiết bị, cấu hình bằng cùng vài lệnh.
- Công cụ nhỏ + pipe — ghép các lệnh đơn giản thành thao tác mạnh, thay vì tìm một lệnh "làm tất cả".
- Đọc thông báo lỗi — phần lớn "Permission denied", "No space left", "connection refused" được giải bằng đúng các kỹ năng trong series (quyền, đĩa, mạng).
- Quyền tối thiểu — user thường + sudo, key thay mật khẩu, dịch vụ chạy bằng user riêng.
Hướng học tiếp
- Kết nối với các series khác: giờ bạn hiểu Linux bên dưới container (series Docker) và server cloud (series AWS) — chúng đều là Linux.
- Đào sâu một mảng: networking nâng cao (firewall, iptables/nftables), bảo mật (SELinux/AppArmor, hardening), hiệu năng (theo dõi tài nguyên, tuning).
- Tự động hóa cấu hình: Ansible để quản lý nhiều server cùng lúc — bước tiếp tự nhiên sau shell scripting.
Cảm ơn bạn đã theo hết series. Linux không phải thứ học một lần là xong, nhưng nền tảng trong 18 bài này đủ để bạn tự tin trên bất kỳ server Linux nào, và tự tra cứu phần còn lại khi cần (nhớ man — Bài 1).
You've reached the end