我在项目中添加了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小时后无法删除。我找不到任何解决方案。请帮忙。
答案 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/