2015-10-02 37 views
18

Tôi đang cố gắng chạy nhiều công việc trong Laravel tại thời điểm khác nhau.Lập lịch biểu nhiều crons trong Laravel

protected function schedule(Schedule $schedule) 
{ 
     $schedule->command('emails:send') 
       ->dailyAt('08:00'); 

     $schedule->command('emails:evening-status') 
       ->dailyAt('17:00'); 

     $schedule->command('email:weekly-report') 
       ->weekly()->mondays()->at('08:00'); 
} 

Vấn đề ở đây là, chỉ lệnh đầu tiên - emails:send - hoạt động. Các lệnh khác không hoạt động tại thời điểm đã chỉ định. Tuy nhiên, khi tôi chạy chúng bằng tay họ làm việc tốt.

Tôi đang thiếu cái gì?

+0

Cùng một vấn đề ở đây bằng cách sử dụng Laravel 5.1.31 – PiTheNumber

+1

Câu hỏi liên quan: http://stackoverflow.com/questions/33998179/laravel-5-1-task-scheduling-command-issue – PiTheNumber

+0

Làm việc tốt với Laravel 5.1.34 –

Trả lời

0

Nếu COMAND thứ hai là không làm việc:

$schedule->command('emails:evening-status') 
      ->dailyAt('17:00'); 

bạn có thể chèn chỉ có một dòng mã in ngày hiện tại trong một số tập tin ví dụ. "test.txt" sau đó kiểm tra thời gian mong muốn nếu tệp được tạo. Nếu tập tin được tạo ra, bạn có thể kết luận rằng một cái gì đó nếu sai với mã trong kịch bản được lên lịch.

0

Sử dụng hàng để xử lý công việc

trên cron, thêm tất cả các công việc phải xếp hàng

Run nhiều công nhân xếp hàng

-1

Bạn có thể thử bên dưới mã:

protected function schedule(Schedule $schedule) 
{ 
     $schedule->command('emails:send') 
       ->dailyAt('08:00')->withoutOverlapping(); 

     $schedule->command('emails:evening-status') 
       ->dailyAt('17:00')->withoutOverlapping(); 

     $schedule->command('email:weekly-report') 
       ->weekly()->mondays()->at('08:00')->withoutOverlapping(); 
} 

Trên mã chỉ thực hiện mà không bị chồng chéo. Bạn có thể có thêm ý tưởng về prevent overlapping.

Hãy cho tôi biết nếu bạn vẫn phải đối mặt với nhau.

+0

Điều gì đã chồng chéo để làm với điều này? – Curos

0

nếu bạn cần sử dụng Laravel Lịch Sử dụng mã này

$schedule = new Schedule(); 
    $schedule->command('emails:send') 
      ->dailyAt('08:00')->withoutOverlapping(); 

    $schedule = new Schedule(); 
    $schedule->command('emails:evening-status') 
      ->dailyAt('17:00')->withoutOverlapping(); 

    $schedule = new Schedule(); 
    $schedule->command('email:weekly-report') 
      ->weekly()->mondays()->at('08:00')->withoutOverlapping(); 

nhưng có thể theo cách này là sai, tư vấn sử dụng Laravel lệnh thợ thủ công và đặt cammand rằng trên cron chủ

0

tình huống tương tự, ngoại trừ mà tôi có thể gọi một phương thức cho mỗi cron sử dụng call, ví dụ:

$schedule->call('\App\Http\Controllers\comm\commCron::abc'); 
$schedule->call('\App\Http\Controllers\comm\commCron::xyz'); 

tôi đã cùng một vấn đề, sau đó nhận ra cron đầu tiên được gọi số exit tại một số điểm lỗi.

Vì vậy, hãy đảm bảo không có trục nào bị giật lại trong exit hoặc die(). Chỉ cần return false thay thế (nếu bạn cần).

1

Chúng tôi đã giới thiệu các sự cố tương tự giới thiệu khi sử dụng mô-đun lập lịch trình dựng sẵn của Laravel.

Trong trường hợp của chúng tôi, lệnh đầu tiên không hoạt động và ngăn các lệnh được lên lịch tiếp theo được chạy.

Để kiểm tra nhanh, hãy thử thay đổi thứ tự của các lệnh sao cho email: gửi ở dưới cùng và xem có hoạt động không. Nói chung, hãy nắm bắt bất kỳ Ngoại lệ nào có thể bị ném và cần khắc phục sự cố.

Các vấn đề liên quan