Hỏi về cách chạy cron job trong Laravel
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 CÂU TRẢ LỜI
- 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à *)
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
Tks bác nhiều, để e thử lại, upvote cho bác r hihi
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
@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
@HuyDQ tks bác
@HuyDQ '0 16 * * 5' => Thứ 6 hàng tuần là '0 16 * * 4' chớ bác ?