Kiến thức Cloud VPS

Cron job là gì? Tự động hóa tác vụ trên VPS

Huỳnh Long Đăng 57 phút trước 1 0

Cron job giúp VPS tự chạy backup, dọn log hoặc script theo lịch. Hướng dẫn này giải thích cú pháp, cách tạo và kiểm tra cron an toàn.

Tình huống phải lặp lại tác vụ và định nghĩa cron job

Quản lý máy chủ đòi hỏi sự kiên nhẫn. Bạn không thể thức dậy lúc 2 giờ sáng mỗi ngày để sao lưu dữ liệu website. Giải pháp thực tế là tự động hóa. Nếu đang quản trị một máy chủ Linux trên cloudmoon.net, bạn nên biết cron job là gì.

Hãy xem cron job giống như một cuốn lịch hẹn tự động. Nó là một tiện ích tích hợp sẵn trên hệ điều hành Linux. Chức năng duy nhất của nó là chạy các lệnh hoặc tập lệnh (script) một cách tự động theo đúng thời gian bạn đã định trước.

Khi nhu cầu quản trị tăng lên và bạn muốn chạy tool tự động trên VPS, cron job chính là công cụ nền tảng, cơ bản và ổn định nhất để xử lý các công việc lặp đi lặp lại.

Phân biệt Cron daemon, cron job và crontab

Người mới làm quen với máy chủ thường nhầm lẫn giữa ba thuật ngữ này. Việc phân biệt rõ chức năng của từng thành phần sẽ giúp bạn thao tác chuẩn xác hơn.

  • Cron daemon (crond): Nó chạy ngầm, không hiện gì ra màn hình. Cứ sang phút mới, daemon đối chiếu đồng hồ hệ thống; trùng lịch thì gọi việc.
  • Cron job: Đây là bản thân tác vụ cụ thể mà bạn muốn thực hiện, gắn liền với thời gian chạy của nó.
  • Crontab (cron table): Đây là một tệp văn bản. Nó đóng vai trò như danh sách lưu trữ các cron job. Crontab là nơi bạn viết các chỉ thị để cron daemon đọc và làm theo.
Lịch và đồng hồ kết nối với máy chủ VPS để minh họa cron job

Cú pháp năm trường và các ký hiệu thường dùng

Mỗi dòng cấu hình lịch trình trong crontab luôn bắt đầu bằng năm trường thời gian, theo sau là lệnh cần thực thi. Cấu trúc chuẩn xác là: * * * * * lệnh_cần_chạy.

Năm dấu sao đại diện cho năm đơn vị thời gian, đếm theo thứ tự từ trái qua phải như sau:

  • Phút: Từ 0 đến 59.
  • Giờ: Từ 0 đến 23.
  • Ngày trong tháng: Từ 1 đến 31.
  • Tháng: Từ 1 đến 12.
  • Ngày trong tuần: Từ 0 đến 7 (lưu ý số 0 và số 7 đều được tính là ngày Chủ nhật).

Để lập lịch linh hoạt, bạn không chỉ nhập số mà còn dùng các ký hiệu đặc biệt:

  • Dấu sao (*): Kích hoạt ở mọi giá trị. Ví dụ: mọi phút, mọi ngày.
  • Dấu phẩy (,): Cài đặt nhiều giá trị rời rạc. Ví dụ: 0,30 * * * * nghĩa là chạy vào phút thứ 0 và phút thứ 30.
  • Dấu gạch ngang (-): Chỉ định một khoảng thời gian liên tục. Ví dụ: 0 9-17 * * * nghĩa là chạy mỗi giờ tròn, từ 9 giờ sáng đến 5 giờ chiều.
  • Dấu gạch chéo (/): Chỉ định tần suất. Ví dụ: */15 * * * * là mỗi 15 phút.
  • Ký hiệu rút gọn: @reboot chạy sau khi khởi động; @daily, @hourly@weekly lần lượt là mỗi ngày, giờ và tuần.

Chuẩn bị script, quyền chạy và đường dẫn tuyệt đối

Trước khi lên lịch cho một tác vụ, tập lệnh của bạn phải hoạt động trơn tru. Bạn cần kết nối vào máy chủ, thường qua giao thức bảo mật (tìm hiểu thêm SSH là gì) để cấu hình.

Đầu tiên, phải cấp quyền thực thi cho tập lệnh. Bạn dùng lệnh: chmod +x /duong/dan/toi/script.sh.

Nguyên tắc cốt lõi cần nhớ: môi trường chạy của cron rất tối giản. Nó không tự động tải các biến môi trường (như PATH) giống như lúc bạn đang trực tiếp gõ phím. Do đó, hệ thống thường không biết lệnh php, python hay curl nằm ở đâu.

Ghi đủ đường dẫn thì cron hết cớ để im lặng. Thay vì viết php script.php, hãy tìm đường dẫn bằng which php, chẳng hạn /usr/bin/php /var/www/script.php.

Tạo cron bằng lệnh crontab, xem danh sách và ví dụ ghi log

Cách quản lý lịch trình phổ biến nhất là chỉnh sửa tệp crontab của người dùng hiện hành.

Để thêm hoặc sửa tác vụ, gõ crontab -e. Trên Ubuntu/Debian cài đầy đủ, đây là cách chuẩn; bản minimal hoặc container có thể chưa có gói cron. Nếu hỏi trình soạn thảo, chọn nano; nếu lỡ vào vi, nhấn Esc, gõ :wq rồi Enter để lưu.

Ví dụ, bạn muốn chạy một lệnh sao lưu lúc 2 giờ sáng mỗi ngày:

0 2 * * * /bin/bash /home/user/backup.sh >> /home/user/logs/backup.log 2>&1

Để kiểm tra lại các tác vụ đã đặt, bạn gõ: crontab -l. Lệnh này sẽ in toàn bộ nội dung tệp crontab lên màn hình để rà soát.

Vì tiến trình chạy ngầm, lỗi không hiện trên màn hình. >> gom phần in bình thường, còn 2>&1 gom thêm phần báo lỗi vào cùng tệp log. Trong crontab, ký hiệu % phải escape; ví dụ >> /home/user/log-$(date +\%F).log 2>&1.

Năm trường thời gian trong cú pháp cron job

Kiểm tra lỗi thường gặp khi cron không chạy

Đôi khi bạn đã làm đúng mọi bước nhưng tác vụ vẫn không nhúc nhích. Khi cron không chạy, hãy rà soát cẩn thận theo trình tự sau.

Đầu tiên, xem service: systemctl status cron trên Ubuntu/Debian hoặc systemctl status crond trên RHEL/CentOS/AlmaLinux. Nếu tắt, dùng sudo systemctl start cron && sudo systemctl enable cron hoặc thay cron bằng crond.

Nhìn log trước đã: Ubuntu thường dùng /var/log/syslog hoặc journalctl -u cron; họ RHEL thường dùng /var/log/cron hoặc journalctl -u crond.

Thứ ba, rà soát đường dẫn tuyệt đối. Như đã nhắc ở trên, đây là nguyên nhân gây lỗi cao nhất.

Thứ tư, kiểm tra múi giờ máy chủ bằng lệnh date. Có thể máy chủ đang chạy theo múi giờ quốc tế UTC, trong khi bạn lại tính toán giờ chạy theo múi giờ Việt Nam.

Cuối cùng, lưu ý dòng cuối nên có ký tự xuống dòng. Trình chỉnh sửa thường tự thêm, nhưng tệp viết tay thiếu newline có thể bị cron cảnh báo hoặc bỏ qua.

User crontab, system crontab và systemd timer

Việc lập lịch được chia thành nhiều mức độ, phụ thuộc vào nơi bạn khai báo.

User crontab: Là loại được tạo ra khi dùng lệnh crontab -e. Mỗi người dùng (kể cả người dùng root) có một tệp riêng. Tác vụ sẽ tự động chạy dưới quyền của chính người dùng sở hữu tệp đó.

System crontab: Tệp này thường nằm ở /etc/crontab và trong thư mục /etc/cron.d. Cấu trúc của nó có thêm một trường thứ sáu dành cho việc khai báo tên người dùng (user). Cú pháp chuẩn là * * * * * username lệnh_cần_chạy. Nó được dùng cho các tác vụ quản trị hệ thống.

Cron hợp với việc chạy đúng giờ rồi thôi. Nếu script phải đợi MySQL hoặc network sẵn sàng, cần retry và nhật ký chi tiết, hãy cân nhắc systemd timer.

Checklist năm bước tạo và kiểm tra cron job an toàn

Checklist an toàn và bảo mật cho Cron job

Tự động hóa mang lại sự rảnh rang nhưng đi kèm rủi ro nếu thiết lập sai. Bạn cần tuân thủ các quy tắc an toàn cơ bản.

  1. Chuẩn bị: thử script bằng tay và dùng đường dẫn tuyệt đối.
  2. Đặt lịch: chọn user phù hợp, không dùng root nếu không cần.
  3. Ghi log: chuyển cả đầu ra và lỗi vào tệp riêng để còn kiểm tra.
  4. Kiểm tra: xem log và tài nguyên; dùng flock -n /tmp/backup.lock /home/user/backup.sh để tránh job chạy chồng.
  5. Bảo mật: không lưu mật khẩu trong crontab; đặt biến trong /home/user/.db.env và chạy chmod 600 /home/user/.db.env.

Bạn cũng nên giám sát tài nguyên VPS để dãn lịch khi máy bắt đầu quá tải.

Các câu hỏi thường gặp

Cron có đảm bảo chạy chính xác từng giây không?

Không. Đơn vị thời gian nhỏ nhất mà tiện ích này hỗ trợ là 1 phút. Dịch vụ daemon sẽ kiểm tra và kích hoạt các tác vụ mỗi khi chuyển sang phút mới, nó không có chức năng hẹn giờ chính xác đến từng giây.

Thoát SSH hoặc tắt cửa sổ terminal thì cron có dừng không?

Không. Cron do daemon chạy nền, độc lập với phiên SSH. Bạn có thể thoát SSH; lịch vẫn được daemon gọi khi tới giờ.

Làm sao để chạy tác vụ mỗi 30 giây bằng cron?

Bởi vì giới hạn là 1 phút, bạn cần dùng một thủ thuật. Bạn tạo hai lệnh chạy cùng lúc trong crontab. Lệnh đầu tiên chạy ngay lập tức. Lệnh thứ hai bạn chèn thêm chữ sleep 30 phía trước để hệ thống trì hoãn 30 giây rồi mới chạy.

Khởi động lại máy chủ có làm mất danh sách cron job không?

Không. Mọi cấu hình crontab đều được lưu trữ an toàn thành tệp tin trên ổ cứng. Khi máy chủ khởi động lại, dịch vụ daemon sẽ tự bật và tiếp tục bám sát các lịch trình này mà không bị gián đoạn.

Làm sao để dừng một tác vụ tự động đang bị treo?

Nếu script bị treo, xóa dòng crontab không dừng tiến trình đang chạy. Dùng pgrep -af backup.sh để tìm PID, rồi kill PID để buộc nó dừng.

Tôi có bắt buộc phải dùng dòng lệnh để cấu hình không?

Nếu bạn sử dụng máy chủ có cài đặt sẵn các bảng điều khiển (control panel) như cPanel, DirectAdmin, thì không bắt buộc. Các bảng điều khiển này đều có giao diện đồ họa để bạn điền số vào ô. Hệ thống tự động dịch nó thành cú pháp dòng lệnh bên dưới.

Lời kết

Tự động hóa không chỉ giúp tiết kiệm công sức thao tác mà còn loại trừ rủi ro do con người quên việc. Nắm vững cron job là bạn đã làm chủ được một kỹ năng không thể thiếu để duy trì máy chủ hoạt động trơn tru.

Để chạy tác vụ ổn định, hãy chọn gói Cloud VPS có tài nguyên phù hợp và quyền quản trị cần thiết. Cron vẫn phụ thuộc vào script, quyền truy cập và tình trạng máy chủ, nên hãy theo dõi log thay vì mặc định mọi lần chạy đều thành công.

Nếu dùng WordPress, bạn có thể thay cơ chế wp-cron chạy theo lượt truy cập bằng một cron thật gọi wp-cron.php theo lịch. Cách này phù hợp khi website ít người truy cập, nhưng cần kiểm tra quyền và đường dẫn trước khi bật.

Nguồn tham khảo

Bài viết liên quan

Bình luận (0)

Bạn cần đăng nhập để bình luận.

Chưa có bình luận nào. Hãy là người đầu tiên!

Zalo