Asked Feb 10th, 2:35 PM 149 0 2
  • 149 0 2
0

Hỏi về cách chạy cron job trong Laravel

Share
  • 149 0 2

E đang đọc đến phần cron job và task schedule trong laravel và có demo thử 1 command như sau: E gọi trong app/Kernel.php như sau: Khi chạy lệnh bên dưới thì nó chỉ thực thi lần đầu e đợi 1 lát vẫn k chạy, các bác cho e hỏi làm sao fix được ạ,

php artisan schedule:run

Với e đang được giao 1 chức năng gởi email cho admin thống kê về danh sách đơn hàng chưa đc xử lý thống kê theo tuần vào t6 hàng tuần (16h), các bác cho e xin hướng giải quyết với ạ, e cảm ơn!

2 ANSWERS


Answered Feb 11th, 3:12 AM
Accepted
+4
  • Mình nghĩ có thể bạn chưa tạo file crontab, bạn cần chạy lệnh

crontab -e

sau đó thêm dòng này vào rồi lưu lại

* * * * * php ~/đường-dẫn-đến-project/artisan schedule:run

Bạn có thể xem thêm bài viết này của mình: https://viblo.asia/p/tim-hieu-ve-task-schedule-trong-laravel-07LKXjyElV4, hi vọng có thể giúp được bạn.

  • Còn về chức năng thống kê chạy vào t6 hàng tuần thì sẽ là: '0 16 * * 4'
* * * * * command/job cần thực hiện
# Trong đó ý nghĩa các dấu * lần lượt từ trái sang phải như sau:
# 1. phút thực hiện (từ 0 đến 59 và *)
# 2. giờ thực hiện (từ 0 đến 23 và *)
# 3. ngày thực hiện (ngày trong tháng, từ 1 đến 31 và *)
# 4. tháng trong năm (từ 1 đến 12 và *)
# 5. thứ trong tuần (từ 0 đến 6 và *)
Share
Answered Feb 10th, 2:52 PM
+7

Trên môi trường dev thì bạn có thể chạy trực tiếp command thử bằng lệnh php artisan log:demo để xem code xử lý bên trong hàm handle() của bạn có đúng như ý muốn không. Còn trên môi trường thực tế để chạy cronjob thứ bạn cần làm 2 việc như sau:

  • Thêm lệnh của bạn vào trong function schedule(), với trường hợp của bạn chạy vào 16h t6 hàng tuần thì sẽ là:
protected function schedule(Schedule $schedule)
    {
        $schedule->command('log:demo')->cron('0 16 * * 5');
    }
  • Thứ 2 là bạn cần khai báo đường dẫn đến project của bạn trên server bằng cách chạy lệnh sudo crontab -e. Sau đó bạn điền nội dung sau vào trong đó:
* * * * * cd /[đường dẫn đến project của bạn] && php artisan schedule:run >> /dev/null 2>&1
Share
duongricky @duongricky
Feb 10th, 2:56 PM

Tks bác nhiều, để e thử lại, upvote cho bác r hihi

0
| Reply
Share
duongricky @duongricky
Feb 10th, 2:59 PM

Chỉ cần lưu nội dung vào trong file đó thì sẽ tự động chạy luôn à bác, hay mình cần chạy thêm gì k

0
| Reply
Share
Feb 10th, 3:59 PM

@duongricky chỉ cần lưu lại là đc nhé bạn, trong docs của Laravel cx có nhắc đến phần này bạn có thể check lại

+1
| Reply
Share
duongricky @duongricky
Feb 11th, 1:16 AM

@HuyDQ tks bác

+1
| Reply
Share
duongricky @duongricky
Feb 11th, 7:21 AM

@HuyDQ '0 16 * * 5' => Thứ 6 hàng tuần là '0 16 * * 4' chớ bác ?

0
| Reply
Share