Contributte / scheduler – nastavení časů spouštění v configu

aha009
Člen | 50
+
0
-

Ahoj,
podařilo se mi rozchodit Contributte/scheduler s pomocí Contributte/console nyní však řeším jak vlastně scheduler použít.
Nedaří se mi v configu nastavit časy spouštění.
Zkoušel jsem dle návodu, ale nepochopil jsem tuto část s callback.

services:
    foo: App\Model\Foo

scheduler:
    jobs:
        - cron: '* * * * *'
          callback: [@foo, echo]
        - cron: '*/2 * * * *'
          callback: App\Model\Bar::echo

V crontab mám * * * * * php path-to-project/console scheduler:run

Pokud dám do configu jen toto tak se spustí dle crontabu každou minutu. To funguje.
Chtěl bych jednu akci spouštět třeba každou hodinu a další každých 12h.

scheduler:
    jobs:
        - App\Model\MyAwesomeJob
		- App\Model\MyAwesomeJob2

Ale pokud se pokusím zadat dle vzoru s callback, tak to končí chybou

scheduler:
    jobs:
        - cron: '*/2 * * * *'
          callback: App\Model\MyAwesomeJob
TypeError

Argument 2 passed to Contributte\Scheduler\CallbackJob::__construct() must be callable, string given, called in /home/nejakyweb/public_html/temp/cache/nette.configurator/Container_b09f00b389.php on line 1221
.../Container_b09f00b389.php:1221   Contributte\Scheduler\CallbackJob->__construct()

1211:
1212:        public function createServiceScheduler__runCommand(): Contributte\Scheduler\Command\RunCommand
1213:        {
1214:            return new Contributte\Scheduler\Command\RunCommand($this->getService('scheduler.scheduler'));
1215:        }
1216:
1217:
1218:        public function createServiceScheduler__scheduler(): Contributte\Scheduler\IScheduler
1219:        {
1220:            $service = new Contributte\Scheduler\Scheduler;
1221:            $service->add(new Contributte\Scheduler\CallbackJob('*/2 * * * *', 'App\Model\MyAwesomeJob'), 0);
1222:            return $service;
1223:        }
1224:

Můžete prosím uvést nějaký příklad reálné konfigurace s nastavením? Děkuji

Aktuální nastavení
config

services:
	- App\Model\MyAwesomeJob
	- App\Model\MyAwesomeJob2
extensions:
    console: Contributte\Console\DI\ConsoleExtension(%consoleMode%)
    scheduler: Contributte\Scheduler\DI\SchedulerExtension
console:
    name: Acme Project
    version: '1.0'
    catchExceptions: true
    autoExit: true
    url: https://mujweb.cz // nevím k čemu toto slouží
    lazy: true
scheduler:
    jobs:
        - App\Model\MyAwesomeJob
		- App\Model\MyAwesomeJob2

MyAwesomeJob

namespace App\Model;

use Contributte\Scheduler\IJob;

class MyAwesomeJob implements IJob
{
    public function isDue(\DateTime $dateTime): bool
    {
        return true;
    }

    public function run(): void
    {
        // Do something
        echo 'huraaa';
    }
}

console

[root@]# php /public_html/bin/console scheduler:list
+-----+-------------------------+--------+---------+----------+
| Key | Type                    | Is due | Cron    | Callback |
+-----+-------------------------+--------+---------+----------+
|     | App\Model\MyAwesomeJob  | TRUE   | Dynamic | Dynamic  |
|     | App\Model\MyAwesomeJob2 | TRUE   | Dynamic | Dynamic  |
+-----+-------------------------+--------+---------+----------+

Editoval aha009 (25. 11. 2020 13:31)

Felix
Nette Core | 1196
+
0
-

Ahoj, podivam se na contribute/scheduler jestli tam nekde nemame chybu. Diky za dotaz.

Felix
Nette Core | 1196
+
0
-

Tak jsem si vyclenil chvili casu. Mas to temer dobre.

extensions:
    console: Contributte\Console\DI\ConsoleExtension(%consoleMode%)
    scheduler: Contributte\Scheduler\DI\SchedulerExtension
console:
    name: Acme Project
    version: '1.0'
    catchExceptions: true
    autoExit: true
    url: https://mujweb.cz // nevím k čemu toto slouží
    lazy: true
scheduler:
    jobs:
        # nazev musi koncit na ()
        - App\Model\MyAwesomeJob()
		- App\Model\MyAwesomeJob2()

Klic console.url slouzi k tomu, ze v CLI rezimu neni vyplnena URL adresa. Kdyz pak clovek posila napriklad emaily, tak se hodi tam tu adresu mit. Nette pak samo umi generovat spravne absolutni odkazy.

Doporucuju otestovat v0.7.0. Mela by fungovat i na PHP 8.