簡體   English   中英

如何在 Laravel 中沒有任務計划程序的情況下進行 CRON 設置?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM