Chuyển tới nội dung chính
Version: 4.1

Hướng dẫn xử lý sự cố cron trên HiTechCloud

Đây là hướng dẫn xử lý sự cố chung cho các tác vụ cron trên HiTechCloud.


1) Cron hoạt động thế nào trong HiTechCloud​

Trong HiTechCloud:

  • Cron KHÔNG chạy trực tiếp trên host như crontab Linux truyền thống.
  • Mỗi người dùng có container cron riêng.
  • Tác vụ chạy bên trong một container được chỉ định (ví dụ openlitespeed, nginx, php, v.v.).
  • Tác vụ cron được khai báo trong /home/USERNAME/crons.ini, không phải trong /etc/crontab.

Trước khi xử lý sự cố cron, luôn kiểm tra xem bản thân lệnh có chạy được không.

Đăng nhập qua SSH với tư cách người dùng của tài khoản (xem Khoá SSH).

Trong shell đó, chạy lệnh thủ công, ví dụ:

php -q /var/www/html/example.com/apps/console/console.php example-task

Nếu lệnh thất bại:​

  • Sự cố KHÔNG phải do cron
  • Hãy sửa lỗi trước (thiếu extension PHP, sai đường dẫn, quyền, cấu hình ứng dụng, v.v.)

Chỉ tiếp tục xử lý sự cố cron sau khi lệnh chạy được thủ công.


3) Kiểm tra dịch vụ cron có đang chạy không​

Mỗi người dùng phải có dịch vụ cron riêng đang hoạt động.

Kiểm tra trong HiTechCloud: https://hitechcloud.org/docs/panel/advanced/services/

Bạn sẽ thấy một dịch vụ cron đang chạy cho người dùng đó.

Nếu nó KHÔNG chạy, hãy khởi động thủ công (terminal):​

cd /home/USERNAME && docker --context=USERNAME compose up -d cron

4) Kiểm tra định dạng tệp cron (crons.ini)​

Kiểm tra tệp cron của người dùng:

cat /home/USERNAME/crons.ini

Một tác vụ đúng trông như sau:

[job-exec "example-job"]
schedule = @every 1m
container = openlitespeed
command = php -q /var/www/html/example.com/apps/console/console.php example-task

Các lỗi thường gặp​

❌ Dùng đường dẫn PHP của host:

/usr/local/lsws/lsphp84/bin/php

✅ Hãy dùng PHP của container:

php

❌ Sai container:

container = web

✅ Phải khớp với container thực tế:

container = openlitespeed

5) Kiểm tra nhật ký thực thi cron (rất quan trọng)​

HiTechCloud cung cấp nhật ký thực thi cho từng tác vụ.

Nhật ký tác vụ cron: https://hitechcloud.org/docs/panel/advanced/cronjobs/#logs

Tìm các dấu hiệu: - Tác vụ đã bắt đầu - Tác vụ thất bại - Lỗi PHP - Permission denied - "Container not found"


6) Kiểm tra đường dẫn bên trong container​

Đường dẫn bên trong Docker có thể khác đường dẫn trên host.

Kiểm tra bên trong container:

docker --context USERNAME exec -it CONTAINER bash
ls /var/www/html

Xác nhận rằng:

/var/www/html/example.com/

thực sự tồn tại bên trong container.


7) Xem nhật ký của container cron​

Nếu tác vụ vẫn không chạy, hãy xem chính container cron:

docker --context USERNAME logs cron

Tìm các dấu hiệu:

  • Lỗi của bộ lập lịch
  • Sự cố khởi động container
  • Sự cố về quyền

8) Kiểm tra chọn đúng container​

Đảm bảo tác vụ dùng đúng container:

Loại ứng dụng Container phù hợp


OpenLiteSpeed + PHP openlitespeed hoặc php Nginx + PHP nginx hoặc php Container độc lập CONTAINER_NAME

Nếu chọn sai → tác vụ thất bại.


9) Mẫu cron chung chạy được​

Với một ứng dụng host tại example.com:

[job-exec "task-1"]
schedule = @every 1m
container = openlitespeed
command = php -q /var/www/html/example.com/apps/console/console.php task-1

[job-exec "task-2"]
schedule = @every 5m
container = openlitespeed
command = php -q /var/www/html/example.com/apps/console/console.php task-2

[job-exec "task-hourly"]
schedule = @hourly
container = openlitespeed
command = php -q /var/www/html/example.com/apps/console/console.php hourly

[job-exec "task-daily"]
schedule = @daily
container = openlitespeed
command = php -q /var/www/html/example.com/apps/console/console.php daily

10) Cây quyết định xử lý sự cố nhanh​

❓ "Cron hoàn toàn không chạy"​

Kiểm tra: - Dịch vụ cron có đang chạy không? → trang Dịch vụ\

  • Có container cron không? → docker --context USERNAME ps | grep cron\
  • Tệp /home/USERNAME/crons.ini có tồn tại không?

❓ "Cron chạy nhưng lệnh thất bại"​

Kiểm tra: - Chạy thủ công bên trong container trước\

  • Xem nhật ký cron trong HiTechCloud\
  • Xem nhật ký container

❓ "Cron chạy nhưng ứng dụng vẫn báo lỗi"​

Kiểm tra: - Nhật ký ứng dụng trong /var/www/html/example.com/.../logs/\

  • Quyền tệp bên trong container