Contributte / scheduler – nastavení časů spouštění v configu
- aha009
- Člen | 50
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
Ahoj, podivam se na contribute/scheduler jestli tam nekde nemame chybu. Diky za dotaz.
- Felix
- Nette Core | 1196
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.