[英]How can I make CRON settings without Task Scheduler in Laravel?
我在使用時遇到問題
php工匠計划:運行
該命令返回
沒有准備好運行的預定命令。
我的服務器允許每 5 分鍾調用一次 CRON。 所以我認為我的服務器設置是不工作的原因:運行。 所以我需要在沒有任務計划程序的情況下嘗試 CRON,並檢查 CRON 是否返回正確的響應。
所以請告訴我如何在沒有任務計划程序的情況下使用 CRON。 作為信息,我把我的代碼放在下面。 這些代碼在我使用時可以正常發送電子郵件並制作日志
php artisan 命令:notice_expired_date
內核.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');
}
}
過期日期通知.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;
}
}
通用文件
namespace App\Console\Commands;
class Common
{
public static function makeLog($command_name)
{
$param = [
'command_name' => $command_name,
];
\Log::info('command executed', $param);
}
}
我自己解決了這個問題。 我像這樣寫了 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,則返回
沒有准備好運行的預定命令。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.