close

Cron Jobs là gì? Cú pháp, ví dụ và cách tạo cron job trên hosting

Tác giả: Hồng Nhi Ngày đăng: 21/06/2024 Chuyên mục: Hosting & Control Panel
Disclosure
Website Tino blog được cung cấp bởi Tino Group. Truy cập và sử dụng website đồng nghĩa với việc bạn đồng ý với các điều khoản và điều kiện trong chính sách bảo mật - điều khoản sử dụng nội dung. Tino Group có thể thay đổi điều khoản sử dụng bất cứ lúc nào. Việc bạn tiếp tục sử dụng Tino blog sau khi thay đổi có nghĩa là bạn chấp nhận những thay đổi đó.
Why Trust Us
Các bài viết với hàm lượng tri thức cao tại Tino blog được tạo ra bởi các chuyên viên Marketing vững chuyên môn và được kiểm duyệt nghiêm túc theo chính sách biên tập bởi đội ngũ biên tập viên dày dặn kinh nghiệm. Mọi nỗ lực của chúng tôi đều hướng đến mong muốn mang đến cho cộng đồng nguồn thông tin chất lượng, chính xác, khách quan, đồng thời tuân thủ các tiêu chuẩn cao nhất trong báo cáo và xuất bản.

Cron job là một lệnh hoặc script được hẹn giờ để máy chủ Linux tự chạy lặp lại theo lịch, ví dụ mỗi 15 phút, 2 giờ sáng mỗi ngày hay ngày 1 hằng tháng. Chương trình chạy nền cron đọc lịch, đến đúng phút thì thực thi lệnh, không cần ai mở máy hay bấm nút. Trên hosting, bạn tạo cron job trong mục Cron Jobs của cPanel (hoặc Cronjobs của DirectAdmin) để chạy backup, gửi email, đồng bộ dữ liệu, gọi wp-cron.php.

Bài thuộc nhóm hướng dẫn quản trị website trên hosting; nền tảng về hosting xem ở hosting là gì. Nếu bạn quản trị VPS và cần các lệnh crontab -e, crontab -l, đọc tiếp bài crontab là gì và cách dùng trên Linux.

Cron Jobs là gì?

Cron Jobs là các tác vụ định kỳ do dịch vụ cron trên Unix/Linux quản lý: mỗi tác vụ là một dòng gồm thời điểm chạy và lệnh cần chạy. Theo tài liệu cron(8) của Ubuntu, cron kiểm tra các bảng lịch mỗi phút và chạy những lệnh khớp với phút hiện tại.

Ba khái niệm hay bị dùng lẫn:

  • cron: chương trình chạy nền (daemon) làm nhiệm vụ đếm giờ và thực thi.
  • crontab (cron table): bảng lịch của từng người dùng, đồng thời là tên lệnh để sửa bảng đó.
  • cron job: một dòng lịch cụ thể trong bảng, ví dụ “2 giờ sáng chạy backup.sh”.

Windows không có cron; tính năng tương đương là Task Scheduler. Vì hosting cPanel/DirectAdmin chạy Linux nên cron có sẵn, bạn chỉ cần quyền dùng mục Cron Jobs.

Cron Jobs được sử dụng để làm gì?

Cron Jobs dùng để tự động hoá việc lặp lại theo giờ cố định trên máy chủ. Với website trên hosting, các việc phổ biến là:

  • Sao lưu dữ liệu: nén mã nguồn, xuất database vào thư mục backup mỗi đêm.
  • Chạy tác vụ của ứng dụng: WordPress (wp-cron.php), Laravel (schedule:run), Magento, WHMCS đều cần cron để xử lý hàng đợi, email, hoá đơn.
  • Gửi email thông báo: bản tin, nhắc gia hạn, báo cáo đơn hàng.
  • Xử lý dữ liệu: dọn file tạm, xoá log cũ, đồng bộ tồn kho, tạo sitemap.

Nguyên lí hoạt động của Cron Jobs

Một cron job có ba phần cố định:

  1. Lịch: 5 trường thời gian cho biết khi nào chạy.
  2. Lệnh: câu lệnh hoặc đường dẫn script cần thực thi, thường là PHP CLI hay shell script.
  3. Đầu ra: mọi thứ lệnh in ra màn hình. cron gửi đầu ra này qua email cho chủ tài khoản (hoặc địa chỉ trong biến MAILTO), trừ khi bạn chuyển nó vào file log hay /dev/null.

Cú pháp cron gồm những gì?

Cú pháp cron gồm 5 trường thời gian cách nhau bằng dấu cách, tiếp theo là lệnh. Thứ tự luôn là phút, giờ, ngày trong tháng, tháng, thứ trong tuần; dấu * nghĩa là “mọi giá trị” (man crontab(5), Ubuntu 24.04).

Sơ đồ một dòng cron: */15 2-5 * * 1-5 kèm lệnh PHP, chú thích phạm vi từng trường phút, giờ, ngày, tháng, thứ và ý nghĩa các ký hiệu * , - / @daily

Một số điểm bài cũ và nhiều tài liệu trên mạng viết sai:

  • Trường thứ nhận 0–7, trong đó cả 0 và 7 đều là Chủ nhật; 1-5 là thứ Hai đến thứ Sáu, 2-4 là thứ Ba đến thứ Năm.
  • Có thể viết tên thay số: mon,wed,fri, jan-mar.
  • Ký hiệu L, W, #, ? và trường giây là cú pháp của Quartz (Java) hay một số dịch vụ đám mây, không dùng được trong crontab của Linux.
  • Khi cả “ngày trong tháng” và “thứ” cùng bị giới hạn, lệnh chạy khi một trong hai khớp. Ví dụ 30 4 1,15 * 5 chạy lúc 4:30 ngày 1, ngày 15 và mọi thứ Sáu.
  • Ký tự % trong lệnh bị cron đổi thành xuống dòng; muốn dùng (ví dụ trong date +%F) phải viết \%.

Ví dụ lịch cron hay dùng

Biểu thứcÝ nghĩaDùng cho
*/5 * * * *Mỗi 5 phútHàng đợi email, wp-cron.php
0 * * * *Phút 0 của mỗi giờĐồng bộ dữ liệu, sitemap
30 2 * * *2:30 sáng mỗi ngàyBackup database, mã nguồn (backup WordPress)
0 8 * * 1-58:00 thứ Hai đến thứ SáuBáo cáo ngày làm việc
0 0 1 * *0:00 ngày 1 hằng thángXoá log cũ, chốt số liệu tháng
0 3 * * 03:00 sáng Chủ nhậtDọn file tạm, tối ưu bảng
15 1 1,15 * *1:15 sáng các ngày 1, 15Hoá đơn, nhắc gia hạn
Giờ chạy tính theo múi giờ của máy chủ hosting

Cron còn có các chuỗi tắt thay cho 5 trường: @hourly (= 0 * * * *), @daily (= 0 0 * * *), @weekly (= 0 0 * * 0), @monthly (= 0 0 1 * *), @yearly (= 0 0 1 1 *) và @reboot (chạy một lần sau khi máy khởi động). Ô nhập trong cPanel chia sẵn 5 trường nên dùng chuỗi tắt chủ yếu khi sửa crontab trực tiếp trên VPS.

Để kiểm tra nhanh một biểu thức, dán vào crontab.guru: trang này diễn giải biểu thức thành câu và liệt kê các lần chạy tiếp theo.

Cách tạo Cron Jobs trên hosting cPanel

Trên hosting cPanel, cron job được tạo trong mục Advanced → Cron Jobs: chọn lịch, nhập lệnh có đường dẫn đầy đủ rồi bấm Add New Cron Job. Không cần cài thêm gì; nhà cung cấp chỉ cần bật tính năng này cho gói (tài liệu cPanel: Cron Jobs). Cách vào cPanel xem ở cPanel là gì.

Bước 1: Truy cập vào cPanel thông qua trang quản lý hosting của bạn.

Bước 2: Kéo xuống phần Advanced (Nâng cao) → chọn Cron Jobs.

Mục Advanced trong cPanel, khung đỏ đánh dấu biểu tượng Cron Jobs

Bước 3: Giao diện tạo Cron Jobs sẽ xuất hiện.

  • Trong phần Common Settings, chọn tần suất có sẵn (Once Per Hour, Once Per Day…); cPanel tự điền 5 ô bên dưới.
  • Hoặc tự cấu hình các trường Minute, Hour, Day, Month và Weekday.
  • Trong phần Command, nhập lệnh với đường dẫn đầy đủ, ví dụ /usr/local/bin/php /home/user/public_html/cron.php.
  • Nhấp vào nút Add New Cron Job để lưu tác vụ.
Form Add New Cron Job trong cPanel: Common Settings, Minute 0, Hour 1, Day, Month, Weekday là dấu sao, Command /usr/local/bin/backup.sh

Ảnh chụp giao diện cPanel bản cũ; ở cPanel & WHM 138 (bản hiện hành theo tier chính thức ngày 25/10/2026) các ô và tên nút vẫn giữ như trên.

Ví dụ: tạo tác vụ sao lưu lúc 1 giờ sáng mỗi ngày:

  • Common Settings: Once Per Day
  • Minute: 0
  • Hour: 1
  • Day: *
  • Month: *
  • Weekday: *
  • Command: /usr/local/bin/backup.sh
Bảng Current Cron Jobs trong cPanel hiển thị tác vụ 0 1 * * * chạy /usr/local/bin/backup.sh với nút Edit và Delete

Để chỉnh sửa tác vụ, nhấp Edit bên cạnh tác vụ, sửa rồi bấm Edit Line. Để xóa, nhấp Delete.

Ba lưu ý theo tài liệu cPanel:

  • Script tự viết (.sh) cần quyền thực thi; nếu không muốn đổi quyền, gọi qua trình thông dịch: /bin/bash /home/user/backup.sh.
  • Cẩn thận với lệnh rm trong cron: sai đường dẫn có thể xoá dữ liệu trong thư mục home.
  • Không đặt lịch dày hơn thời gian lệnh chạy xong, nếu không nhiều tiến trình sẽ chồng lên nhau và làm chậm hosting.

Nhận email hoặc tắt email của cron trong cPanel

Ô Cron Email ở đầu trang Cron Jobs nhận đầu ra của mọi tác vụ. Lệnh chạy mỗi 5 phút sẽ gửi khoảng 288 email mỗi ngày, vì vậy nên ghi đầu ra vào file log hoặc bỏ đi:

# Ghi đầu ra vào file log (giữ lại để tra lỗi)
/usr/local/bin/php /home/user/public_html/cron.php >> /home/user/logs/cron.log 2>&1

# Bỏ toàn bộ đầu ra, không gửi email
/usr/local/bin/php /home/user/public_html/cron.php >/dev/null 2>&1

Cách tạo Cron Jobs trên hosting DirectAdmin

DirectAdmin cũng có mục tạo cron cho từng tài khoản, dùng đúng 5 trường thời gian và một ô lệnh như cPanel. Ở trang chính của DirectAdmin, gõ “cron” vào ô tìm kiếm để mở mục Cronjobs, điền Minute, Hour, Day of Month, Month, Day of Week, nhập lệnh có đường dẫn đầy đủ rồi bấm tạo.

Tên mục và vị trí nút có thể khác nhau giữa các giao diện DirectAdmin. Đường dẫn PHP CLI trên DirectAdmin thường khác cPanel; hỏi nhà cung cấp hoặc chạy which php qua SSH để lấy đúng đường dẫn.

Dùng cron thay WP-Cron cho WordPress

WP-Cron là bộ hẹn giờ của WordPress, chỉ chạy khi có người mở trang. Website ít khách sẽ đăng bài hẹn giờ, gửi email, chạy backup plugin bị trễ; ngược lại, WordPress vẫn kiểm tra danh sách tác vụ ở mọi lượt tải trang, tốn thêm tài nguyên máy chủ. Tài liệu WordPress Developer: Hooking WP-Cron into the system task scheduler khuyên giao việc này cho cron của máy chủ rồi tắt WP-Cron trong wp-config.php.

So sánh WP-Cron mặc định chạy theo lượt xem trang với cron của hosting chạy đúng giờ, kèm ba bước theo thứ tự: tạo cron gọi wp-cron.php, thêm DISABLE_WP_CRON vào wp-config.php, kiểm tra Site Health

Làm theo đúng thứ tự:

  1. Tạo cron job mỗi 15 phút trong cPanel, lệnh: wget -q -O - https://tenmien.vn/wp-cron.php?doing_wp_cron >/dev/null 2>&1. Nếu hosting có PHP CLI, có thể dùng cd /home/user/public_html && /usr/local/bin/php wp-cron.php.
  2. Mở file wp-config.php, thêm dòng define( 'DISABLE_WP_CRON', true ); phía trên dòng “That’s all, stop editing”.
  3. Sau vài giờ, vào Công cụ → Tình trạng trang (Site Health) xem có cảnh báo “sự kiện đã lên lịch bị trễ” không.

Cron job không chạy: kiểm tra những gì?

Cron job không chạy thường do sai đường dẫn, thiếu quyền hoặc môi trường khác với khi bạn chạy tay: cron chạy với biến PATH rút gọn, không đọc file cấu hình shell của bạn và không biết thư mục hiện tại. Kiểm tra lần lượt các điểm dưới, dừng ở điểm đầu tiên sai:

  • Đường dẫn đầy đủ: cron không biết thư mục hiện tại của bạn; viết đủ /home/user/… và đường dẫn tới php.
  • Phiên bản PHP: PHP CLI mặc định có thể khác phiên bản bạn chọn cho website; gọi đúng binary của phiên bản cần dùng.
  • Quyền thực thi: chạy chmod +x cho script hoặc gọi qua /bin/bash.
  • Ký tự %: phải viết \%.
  • Xem log: tạm thời đổi >/dev/null thành >> ~/cron.log 2>&1 để đọc lỗi thật.
  • Thử chạy tay: chạy đúng lệnh đó qua Terminal trong cPanel; chạy tay lỗi thì cron cũng lỗi.

Lợi ích và hạn chế của Cron Jobs

Lợi ích lớn của cron job là chạy đúng giờ mà không cần ai truy cập website, có sẵn trên hosting Linux và không tốn thêm phí. Đổi lại, cron không chạy dày hơn 1 phút, không tự chạy bù lần bị lỡ và dễ bị kẻ xấu lợi dụng khi tài khoản hosting bị chiếm.

Nội dung
Lợi íchCó sẵn trên hosting Linux dùng cPanel hoặc DirectAdmin, không tốn phí thêm; chạy đúng giờ kể cả khi không ai truy cập; cú pháp gọn, một dòng cho một tác vụ; dùng được với mọi ngôn ngữ có lệnh chạy từ dòng lệnh.
Hạn chếKhông chạy dày hơn 1 lần mỗi phút; không tự chạy bù khi máy tắt đúng giờ hẹn; không báo lỗi rõ ràng nếu bạn tắt email; tác vụ chạy lâu có thể chồng lên lần chạy sau.
Rủi ro bảo mậtKẻ chiếm được tài khoản hosting thường cài cron để chạy lại mã độc. Định kỳ mở mục Cron Jobs kiểm tra có dòng lạ không, đặc biệt sau khi website bị nhiễm mã độc.

Khi nào không nên dùng cron trên hosting?

Cron trên shared hosting hợp với tác vụ ngắn, chạy theo lịch thưa. Ba trường hợp dưới đây nên chọn cách khác, vì cron trên hosting sẽ chạy chập chờn, bị dừng giữa chừng hoặc không có quyền dùng:

  • Cần chạy dưới 1 phút hoặc chạy liên tục (worker, websocket, bot): shared hosting không phù hợp, hãy dùng VPS với systemd hoặc supervisor (so sánh ở bài nên chọn shared hosting hay VPS).
  • Tác vụ nặng chạy hàng chục phút (xử lý video, nhập hàng trăm nghìn sản phẩm): dễ chạm giới hạn CPU/RAM của gói và bị dừng giữa chừng.
  • Chỉ cần gọi một URL theo lịch mà không có quyền cron: có thể dùng dịch vụ ngoài như cron-job.org, nhưng phải bảo vệ URL đó bằng khoá bí mật.

Kết luận

Cron job là cách đơn giản để hosting tự làm việc lặp lại đúng giờ: backup, email, tác vụ của WordPress hay Laravel. Nắm 5 trường thời gian, luôn dùng đường dẫn đầy đủ, ghi đầu ra vào log và kiểm tra định kỳ danh sách cron là đủ cho hầu hết website. Khi cần lịch dày hơn 1 phút hoặc tác vụ chạy dài, đó là dấu hiệu nên chuyển lên VPS.

Cần hosting ổn định cho website? Hosting của Tino dùng ổ NVMe, LiteSpeed và cPanel để bạn tự quản trị. Xem cấu hình và giá trên trang sản phẩm.

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

cron-job.org là gì?

cron-job.org là dịch vụ miễn phí (duy trì bằng quyên góp) gọi một URL theo lịch bạn đặt, hợp với website không có quyền cron. Theo FAQ của cron-job.org, mỗi job chạy tối đa 60 lần/giờ và bị ngắt nếu URL không phản hồi sau 30 giây.

Có thể chạy cron job theo giây không?

Không. Đơn vị thời gian tối thiểu của cron là 1 phút. Nếu cần chạy mỗi vài giây, hãy viết một tiến trình chạy liên tục (vòng lặp có sleep) và quản lý bằng systemd trên VPS; trên shared hosting cách này thường bị chặn.

Cron job chạy theo múi giờ nào?

Cron dùng múi giờ của máy chủ. Nếu máy chủ không đặt giờ Việt Nam, hãy quy đổi trước khi nhập lịch, hoặc kiểm tra bằng lệnh date trong Terminal.

Làm sao biết cron job đã chạy?

Ghi thêm thời điểm chạy vào log, ví dụ /usr/local/bin/php /home/user/public_html/cron.php && date >> /home/user/logs/cron-ok.log: mỗi lần lệnh chạy xong không lỗi, file log có thêm một dòng ngày giờ. Không thấy dòng mới sau giờ hẹn nghĩa là lệnh không chạy hoặc chạy lỗi.

Tạo cron job chạy file PHP theo đúng phiên bản PHP như thế nào?

Gọi thẳng binary PHP CLI của phiên bản cần dùng thay vì lệnh php chung. Trên cPanel dùng EasyApache 4, binary nằm ở dạng /opt/cpanel/ea-php83/root/usr/bin/php; trên máy chủ CloudLinux có PHP Selector, dạng /opt/alt/php83/usr/bin/php. Chạy thử lệnh với tham số -v trong Terminal để chắc đường dẫn tồn tại trước khi dán vào ô Command.

Hồng Nhi

Content Manager

Chị Hồng Nhi, "người giữ lửa" đứng sau wiki.tino.org, là một Content Manager tài năng với hành trình sự nghiệp đầy cảm hứng. Tốt nghiệp cử nhân Ngữ văn Anh năm 2017, cử nhân Ngữ văn Nga năm 2019 và Thạc sĩ Quan hệ Quốc tế năm 2024 tại trường Đại học KHXH&NV - ĐHQG TP.HCM, chị sở hữu nền tảng kiến thức vững chắc cùng kinh nghiệm dày dặn trong lĩnh vực truyền thông.Vốn xuất thân từ "xã hội" nhưng với niềm đam mê sáng tạo nội dung giá trị, chị đã "lấn sân" sang lĩnh vực công nghệ và nhanh chóng khẳng định bản thân. Với phương châm "diễn giải cái khó hiểu nhất bằng cách dễ hiểu nhất", chị đã chinh phục độc giả bằng những bài viết blog công nghệ súc tích, dễ hiểu và hữu ích. Đồng hành cùng TinoHost từ những ngày đầu thành lập, chị Hồng Nhi hiện là Content Manager, người trực tiếp quản lý và vận hành wiki.tino.org cùng nhiều website uy tín khác.

Xem thêm bài viết

Bài viết liên quan