Zadanie batchowe laravel

0

Dzień dobry wszystkim,

Mam problem z odpaleniem zadań cyklicznych w Laravel. Już tłumaczę co mam i gdzie utknąłem.

Mam utworzoną nową klase cronEmail i nową komende notify:email

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;

use Mail;
// use Illuminate\Http\Request;
// use App\Http\Controllers\Controller;

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

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Send email to Administrator';

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

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        error_log('Test wywolania zadania BATCHOWEGO');
       
    }
}

Jest ona normalnie widoczna przez system:

screenshot-20180603112653.png

Dodatkowo to ręcznym przetestowaniu działa bez problemu:

screenshot-20180603112809.png

Następnie dodałem wywołanie tej komendy w 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 = [
        'App\Console\Commands\cronEmail',
        // Commands\cronEmail::class
    ];

    /**
     * Define the application's command schedule.
     *
     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
        //TEST
        $schedule->command('notify:email')
                 ->everyMinute();
                 
    }

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

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


Następnym krokiem jest odpalenie schedule, aby komenda zawarta w Kernel.php wykonywała się cyklicznie co minutę (akurat w tym teście).

Z dokumentacji laravel:

          • php /path/to/artisan schedule:run 1>> /dev/null 2>&1

I właśnie tu pojawia się problem. Nie mogę wpisać poprawnej PathToArtisan

próbuję między innymi w ten sposób:

screenshot-20180603113243.png

Ale tak jak widać z marnym skutkiem. Próbowałem bardzo wiele kombinacji - nie ma sensu żebym teraz je wypisywał.

Aczkolwiek, znalazłem w internecie że przy pomocy polecenia crontab -e powinienem dostać w odpowiedzi właśnie potrzebną mi PathToArtisan. Niestety konsola tego nie rozpoznaje.

screenshot-20180603113729.png

Czy ktoś jest w stanie w jakiś sposób pomóc? Odnaleźć PathToArtisan? Albo może ktoś zna jakieś polecenie za pomocą którego można to znaleźć?
Paróbowałem również użyć env :

screenshot-20180603113957.png

Ale z tym PATH jest chyba coś nie tak(za długi)? Chyba że powinienem wybrać część z niego? Próbowałem z całoscią ale nie działa.

Będę niezmiernie wdzięczny za pomoc!

Jeżeli mój post nie jest zgodny z normami na tym forum - proszę o wybaczenie - jest to mój pierwszy post :)

0

z tego co widzę u mnie działa
* * * * * php /var/www/html/katalog_projektu/artisan schedule:run >> /dev/null 2>&1

//edit
dlaczego masz /C/ ? powinno być C:/

0

Właśnie u mnie jest chyba coś nie tak. Co do poleceń próbowałem na prawdę różne. Te jak widać też nie działają:

screenshot-20180603131156.png

A powiedz mi proszę, jaka jest dokładnie lokalizacja Twojego projektu skoro masz ścieżkę /var/www/html/katalog_projektu ?

1

bo to ścieżka linuxowa co podałem, na windowsie nie odpalałem tego nigdy

1

crontab jest poleceniem linuksowym, jak i zresztą cała podana linia komend (patrz: >> /dev/null - przecież tego na Windowsie nie ma).
Dlaczego kopiujesz polecenia z internetu bez ich zrozumienia? Kiedyś rozwalisz sobie czymś takim system.

0

Aaaa scieżka linuksowa - rozumiem.

A co do crontab - dzięki za odpowiedź. W końcu wiem dlaczego nie działa. Czyli mój PathToArtisan w Windows to będzie:

C:\Users\Dom\tasker-katalog\tasker - w tym miejscu jest główny folder projektu i również znajduję się tutaj między innymi plik artisan.

Więc ścieżka jest raczej poprawna, dobrze mówię?

screenshot-20180603134721.png

Tylko pytanie dlaczego wciąż nie chce mi zaakceptować tego?

Ktoś ma jakiś pomysł?

1

php /C:/Users/... - co tu robi slash na początku?

0

Panowie - dobra robota!!! Jakiś postęp mamy. Spójrzcie proszę na to:

screenshot-20180604014745.png

Nie ma błędu! Oraz schedule się odpaliło, ponieważ zadanie określone w danej komendzie się wykonało tylko pytanie dlaczego tylko raz ?

Kod z Kernel.php wygląda natępująco:


<?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 = [
        'App\Console\Commands\cronEmail',
    ];

    /**
     * Define the application's command schedule.
     *
     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
        
        $schedule->command('notify:email')->everyMinute();
                 

    }

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

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


Jak widać w kodzie powyżej komenda norify:email powinna się wykonywać co minutę.

$schedule->command('notify:email')->everyMinute();

Macie jakieś pomysły?

0

Laravelowy scheduler działa tak, że to polecenie (z tym php artisan ...) powinno być uruchamiane co minutę (dlatego też umieszcza się to w crontabie), aby wszystko działało poprawnie.

Innymi słowy: pojedyncze odpalanie tego polecenia uruchamia tylko harmonogramy przypisane do danej minuty i się kończy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1