Laravel 프로젝트에 cronjob을 설정하는 방법

3435 단어
이메일 알림 보내기, 비활성 사용자 확인, 일일 백업 실행 등과 같은 작업은 일반적으로 반복적이므로 개발자/시스템 관리자는 cron의 기능을 활용하여 이러한 작업을 자동화해야 합니다.

이 튜토리얼은 laravel 애플리케이션에서 작업을 자동화하는 방법(스케줄링이라고 함)을 보여줍니다.

1단계: Laravel 애플리케이션 디렉토리의 명령줄에서 콘솔의 다음 명령을 실행하여 새 명령을 만듭니다.php artisan make:command CurrencyCron --command=curr:cron
2단계: 새로 생성된 명령 파일을 열고 다음과 같이 논리를 편집합니다.
(디렉토리: app/Console/Commands/CurrencyCron.php)

namespace App\Console\Commands;

use Illuminate\Console\Command;
use App\Models\Fx_rates;

class CurrencyCron extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'curr:cron';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Command description';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return int
     */
    public function handle()
    {
        \Log::info("Cron running!");

          // Database, email or backup logic goes here:

                        $convert = new Fx_rates();
                        $convert->base_curr = "NGN";
                        $convert->target_curr = $currency;
                        $convert->online_forex_rate = $res;
                        $convert->desc = $word;
                        $convert->save();

        }

}



3단계: Kernel.php 파일에 명령을 등록하여 빈도와 명령 실행 시기를 처리합니다.

(디렉토리: app/Console/Kernel.php)

<?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 = [
        //
        Commands\CurrencyCron::class,
    ];

    /**
     * Define the application's command schedule.
     *
     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
        // $schedule->command('inspire')->hourly();
        $schedule->command('curr:cron')
                 ->timezone('Africa/Lagos')
                 ->dailyAt('08:00');
    }

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

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



4단계: 일정을 테스트 실행하여 다음을 사용하여 실행되는지 확인합니다.php artisan schedule:run
5단계: 마지막으로, Laravel 애플리케이션의 모든 일정을 처리할 단일 cron 항목을 서버에 추가해야 합니다.

SSH 터미널에 다음 명령을 입력합니다.
ㅏ. crontab -e . 서버에서 처음으로 cron을 구성하는 경우 편집기를 사용하라는 메시지가 표시됩니다.

비. * * * * * /usr/bin/php /var/www/html/your_laravel_app/artisan schedule:run > /tmp/cron_log이것은 cron 데몬을 1분마다 실행하고 Kernel.php에서 정의한 모든 일정을 확인하고 실행하고 분석을 위해 tmp 폴더에 로그 파일을 덤프하는 지시문입니다.
Cron은 명령이 성공적으로 실행되는지 여부에 대한 정보를 제공하지 않으므로 문제를 해결하는 유일한 방법은 로그 파일을 보유하는 것입니다.

씨. 다음을 입력하여 서비스를 다시 시작합니다.sudo service cron reload

좋은 웹페이지 즐겨찾기