Schedule命令未在服务器上运行

时间:2019-07-18 06:17:35

标签: laravel-5 cron

我在项目中添加了cron作业,但是cron作业在ubuntu服务器上无法正常工作。我正在寻找解决方案,但找不到。

这是Console/Kernel.php的代码。 我在哪里设置我的脚本命令。还要告诉我,我不使用(daily())之类的时间,那么在运行该命令多少时间之后?

<?php

namespace App\Console;

use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;

class Kernel extends ConsoleKernel
{
   /**
       * The Artisan commands provided by your application.
   *
   * @var array
   */
   protected $commands = [
     //
   ];

/**
 * Define the application's command schedule.
 *
 * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
 * @return void
 */
protected function schedule(Schedule $schedule)
{
    // $schedule->command('inspire')
    //          ->hourly();
    $schedule->call('App\Http\Controllers\Api\ScheduledNotificationController@moodCapacityReached')->everyMinute();
    $schedule->call('App\Http\Controllers\Api\ScheduledNotificationController@upcomingWeekEvent');
    $schedule->call('App\Http\Controllers\Api\ScheduledNotificationController@upcomingDayEvent');
    $schedule->call('App\Http\Controllers\Api\ScheduledNotificationController@upcomingHourEvent');
    $schedule->call('App\Http\Controllers\Api\CompanyCheckinController@beforedaycheckin')->daily();
    $schedule->call('App\Http\Controllers\Api\MoodOfTheDayController@beforeDayMoods')->daily();
}

/**
 * Register the commands for the application.
 *
 * @return void
 */
protected function commands()
{
    $this->load(__DIR__.'/Commands');

    require base_path('routes/console.php');
}

}

这是在命令调用后运行的Controller代码:

CompanyCheckinController.php文件:

public function beforedaycheckin()
{
    $companycheckin = CompanyCheckin::where('created_at', '<=', Carbon::now()->subDays(1)->toDateTimeString())->get();
    CompanyCheckin::where('created_at', '<=', Carbon::now()->subDays(1)->toDateTimeString())->delete();
    // return response()->json(['Checkin' => $companycheckin], 200);

}

我在一台服务器上运行此命令以root用户身份运行schedule命令。

sudo crontab -e

但是该方法未调用,并且companyCheckin在24小时后无法删除。我找不到任何解决方案。请帮忙。

1 个答案:

答案 0 :(得分:0)

Laravel scheduler有已知问题。不确定它是否在最新版本中变得更好,但是在Laravel 5.3中遇到很多问题之后,我决定不依赖它。

我的建议是,您要好得多,可以在Laravel中创建命令,然后直接通过cPanel或终端在服务器上设置CRON,而不是通过调度程序进行设置。

如果您的服务器上装有cPanel,则添加一个在给定时间间隔运行命令脚本的cron相当简单。例如,如果您想每分钟运行一个脚本,只需添加以下内容即可:

*   *   *   *   *   php {full_path_to_your_project_root}/artisan {command:signature} >> {full_path_to_your_project_root}/storage/logs/{name_of_log_file}.log

,瞧。这样,您的cron运行日志也将记录在{name_of_log_file}.log中,仅用于调试目的。

您可以在以下时间验证cron的各种时间设置:https://crontab.guru/