bytespin/console-command-scheduler-bundle
ByteSpin Console Command Scheduler is a Symfony 6.3+ bundle for scheduling console commands via Messenger Scheduler, logging execution time, duration and return codes to database and log files, with an EasyAdmin interface and extendable email notifications.
TextField bound to the integer id property, which EasyAdmin's TextConfigurator rejects ("can't be converted into a string"). The badge now rides the Job Title column (string property); an entry skipped by the last schedule build shows a red "invalid" badge next to its title.RecurringMessageFactory: single point of truth converting a scheduler entry into a RecurringMessage — shared by the schedule provider, the entity validator and the new lint command, so what validates is exactly what runs.ConsoleJobsScheduler::getSchedule(): an invalid entry no longer takes the whole schedule down — it is skipped with an error log and a SchedulerEntryFaultedEvent, and every other entry keeps running. (Previously a single bad frequency crashed the scheduler worker at boot and silently stopped ALL scheduled tasks.)SchedulerEntryFaultedEvent (bytespin.scheduler.entry.faulted): hook for host applications to plug their own monitoring on skipped entries.ValidSchedulerEntry constraint on the Scheduler entity: the frequency must build a real recurring message for the chosen execution type at input time. A cron expression typed into the interval field is rejected with an explicit hint instead of being accepted and killing the scheduler at runtime.bytespin:scheduler:lint command: dry-runs every entry through the same factory the scheduler uses (CI, deploy pipelines, post-restore checks); exits non-zero when an enabled entry cannot run.bytespin_console_command_scheduler.scheduler.process_only_last_missed_run (default true).scheduler.process_only_last_missed_run: false to restore the previous replay-everything behavior.ConsoleJobsScheduler now depends on the factory, an event dispatcher, an optional logger and the missed-run flag; the command introspection moved to Factory\ConsoleCommandIntrospector.ConfigureBundleCommand using Symfony best practices: #[AsCommand] attribute, SymfonyStyle for user interaction, %kernel.project_dir% injection, --no-interaction support.PostInstallScript (dead code, raw I/O incompatible with Symfony Console).ext-readline dependency (no longer needed).ScheduledConsoleCommandEvent class extending Symfony\Contracts\EventDispatcher\Event with named constants (BEFORE, LOG, SUCCESS, FAILURE, AFTER).GenericEvent with ScheduledConsoleCommandEvent in handler and subscribers.SchedulerEasyAdminEventSubscriber from Doctrine\Common\EventSubscriber (removed in ORM 4) to #[AsDoctrineListener] attributes.#[AllowDynamicProperties] across the bundle, declare properties explicitly.Scheduler entity setters (DateTimeInterface|string|null).ConsoleJobsScheduler schedule loop.PostInstallScript checking for wrong bundle name (MessengerDedupeBundle).Configuration.php class declaration.SchedulerEasyAdminEventSubscriber (getExecutionuntilDate → getExecutionUntilDate).SchedulerLog::setReturnCode() to accept int|null (was string|null only).SchedulerLog::setDuration() to properly cast float to string.ExecuteConsoleCommand::$logFile default value from "" to null.ConsoleJobsScheduler.php-cs-fixer @Symfony code style across the bundle.README.md to include new mandatory configuration steps (manual or automatic) and checks.try/catch block for better management of potential exceptions during process execution.README.md to include instructions for manual bundle registration in bundles.php for users not utilizing Symfony Flex.How can I help you explore Laravel packages today?