使用时出现问题
php artisan日程:运行
该命令返回
没有计划的命令可以运行。
我的服务器允许每5分钟拨打一次CRON。 所以我认为我的服务器设置是不按期运行的原因:运行。 因此,我需要尝试不使用Task Scheduler的CRON,并检查CRON是否返回正确的响应。
所以,请告诉我如何在没有Task Scheduler的情况下使用CRON。 作为信息,我将代码放在下面。 这些代码在我使用时可以正常发送电子邮件并进行记录
php artisan命令:notice_expired_date
Kernel.php
namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
protected $commands = [
'\App\Console\Commands\NoticeExpiredDateCommand',
];
protected function schedule(Schedule $schedule)
{
$schedule->command('command:notice_expired_date')
->daily()
->at(config('const.OPEN_TIME.FROM'))
->appendOutputTo(storage_path('logs/schedule/notice_expired_date.log'));
}
protected function commands()
{
$this->load(__DIR__ . '/Commands');
require base_path('routes/console.php');
}
}
ExpiredDateNotification.php
namespace App\Console\Commands;
use App\Ticket;
use App\User;
use Carbon\Carbon;
use Illuminate\Console\Command;
use App\Notifications\ExpiredDateNotification;
class NoticeExpiredDateCommand extends Command
{
protected $signature = 'command:notice_expired_date';
protected $description = 'send email to user to notice the expired date of his tickets.';
public function __construct()
{
parent::__construct();
}
public function handle()
{
$this->checkBefore1Week();
Common::makeLog($this->getName());
}
protected function checkBefore1Week()
{
$from = Carbon::today()->copy()->addDays(7)->format('Y-m-d H:i:s'); //ex. 2019-03-01 00:00:00
$to = Carbon::tomorrow()->copy()->addDays(7)->subSecond()->format('Y-m-d H:i:s');
$tickets = Ticket::whereBetween('expired_date', [$from, $to])->get();
$noticing_users = [];
foreach ($tickets as $i => $ticket) {
$noticing_users[$i] = $ticket['user_id'];
}
if ($noticing_users != []):
$users = User::find($noticing_users);
foreach ($users as $user) :
$user->notify(new ExpiredDateNotification($user, $expired_date = $from));
endforeach;
endif;
}
}
Common.php
namespace App\Console\Commands;
class Common
{
public static function makeLog($command_name)
{
$param = [
'command_name' => $command_name,
];
\Log::info('command executed', $param);
}
}
答案 0 :(得分:0)
我自己解决了这个问题。 我是这样写cron的,但是没用。
* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1
现在,我像这样编写cron,并且可以正常工作。
*/5 * * * * cd /{project directory} && /usr/local/bin/php artisan schedule:run >> /dev/null 2>&1
php目录可能取决于服务器。
关于我在终端上键入以下内容。
php artisan schedule:run
时间的分钟数是5 该命令返回
运行计划的命令
如果时间的分钟位置不是5,则返回
没有计划的命令可以运行。