Skip to content

Scheduled jobs ​

This page records source declarations in axelites/menzzo-meduse at 5d3de6cb63b976aaeef739a8a7f288c4b46509ad. It is an inventory of code, not proof that a scheduler is installed or running. For the broader connector handoffs, see the Meduse workflow map.

Scheduler entry point and coverage ​

The application schedule is declared in app/Console/Kernel.php and in six module ScheduleServiceProvider classes. Each of those six modules is enabled in the checked-in modules_statuses.json; its module.json names the module provider, and that provider registers the schedule provider. This establishes the source registration path, not runtime provider state.

The scan found 38 non-commented command schedule declarations: 11 in the application kernel and 27 in module providers. Thirty-five are not gated by feature configuration (process-list guards still apply to many of them); three Spanish Merchant Center declarations are feature-configuration-gated. No active Schedule::job(...) declaration was found. Commented worker and schedule examples are excluded from the inventory.

config/app.php sets the application timezone to Europe/Paris. Schedule declarations without an event-level timezone use that configured timezone; the Spanish Merchant Center sync, verify, and cleanup entries explicitly use UTC. The checked-in config does not establish the host clock, deployed configuration, or whether the scheduler runner is installed.

The source comment names Laravel's runner schedule:run. The repository does not define an application command named schedule or show a host cron/service that invokes schedule:run. This page does not authorize running any listed command against production; production commands require approval for the exact command and target.

The ps xf checks below are source-level registration guards: when the checked process listing contains the command text, that provider does not add the schedule event. They are distinct from scheduler overlap locks and are not evidence that a task or worker is healthy.

Application kernel ​

All times below use Europe/Paris unless stated otherwise. ps xf means the event is conditionally registered from the current process listing.

CommandTimingGuard and scheduling controlsHandler and downstream work
meduse:sync-after-magento-updateEvery minuteps xf checkReads completed Menzzo export files from Logidav FTP, updates product connector metadata, moves processed files to Logidav's new-product finished area, then calls meduse:module:logidav:sync-product-to-logidav for changed product IDs. Handler: app/Console/Commands/SyncAfterMagentoUpdate.php.
menzzo:fill:products-flatDaily at 20:00ps xf checkRebuilds/synchronizes the catalog_product_flat data and schema from catalog products and filterable attributes. Direct database work. Handler: app/Console/Commands/FillCatalogProductFlat.php.
unlock:productsDaily at 23:00ps xf checkClears locked_by in catalog_product and catalog_product_flat. Direct database update. Handler: app/Console/Commands/UnlockProducts.php.
clean:old-filesSundays at 23:00ps xf checkDeletes local connectors, modules, and tmp files, and Logidav FTP files older than seven days. FTP traversal skips meduse/connectors/menzzo/menu and meduse/connectors/logidav/export-asir-mappings. Handler: app/Console/Commands/CleanOldFiles.php.
menzzo:retry-failed-filesHourlyps xf checkMoves files older than one hour from Menzzo FTP export/processing back to export/pending. This is file recovery, separate from Laravel's failed-job store. Handler: app/Console/Commands/MoveFailedProcessingFilesToPendingFtpDirectory.php.
logidav:import-missing-merchant-center-dataDaily at 00:30ps xf checkReads merchant-center-data.jsonl from Logidav FTP and updates matching connector resource records across tenants. Handler: app/Console/Commands/ImportMissingMerchantCenterData.php.
logidav:import-product-data-to-connector-ressource-data --mosaikasa-shipping-onlyEvery five minuteswithoutOverlapping()Reads Logidav connector JSONL and merges shipping amounts into Mosaikasa ConnectorResourceData. Direct FTP/database work; it does not dispatch a Laravel job. Handler: app/Console/Commands/ImportAllProductsDataToConnectorRessourceDataTable.php.
google:refresh-access-tokensEvery 30 minutesps xf checkUses the stored Google refresh token, requests a new access token, and saves the returned token values through GoogleAccess. Handler: Modules/MerchantCenter/Console/RefreshGoogleAccessTokens.php.
google:refresh-mosaikasa-es-tokenMinutes 25 and 55 of each hour, UTCwithoutOverlapping(); appends output to storage/logs/scheduled_tasks.logRefreshes the Spanish Merchant Center token. The command also takes a five-minute file-cache lock and saves the new token through GoogleAccessSpanish. Handler: Modules/MerchantCenter/Console/RefreshSpanishGoogleTokenCommand.php.
shopify:run-scheduled-bulk-operationsEvery five minutesps xf, withoutOverlapping(), onOneServer(), runInBackground()Reads the oldest QUEUED row from Mosaikasa's shopify_bulk_operations, stages its JSONL file, submits the Shopify bulk mutation, and updates the operation row. This is a custom database worklist, not a Laravel queue worker. Handler: Modules/Mosaikasa/Console/Commands/RunScheduledBulkOperationsCommand.php.
shopify:check-bulk-operationsEvery ten minutesps xf, withoutOverlapping(), onOneServer(), runInBackground()Polls Shopify for CREATED/RUNNING operations and writes status to shopify_bulk_operations; on completion it records the result URL and removes the local JSONL file, and on failure it stores the error code. Handler: Modules/Mosaikasa/Console/Commands/CheckBulkOperationsCommand.php.

Module schedules ​

Module entries use the same Europe/Paris timezone unless explicitly marked UTC. The provider guards and controls are listed once per module; they apply to each row in that module's table.

Ameubleo ​

Each entry checks one ps xf snapshot taken when the provider boots, then uses withoutOverlapping(60), onOneServer(), and runInBackground().

CommandTimingHandler and downstream work
meduse:module:ameubleo:export-catalog-feedMinute 0 every six hoursAmeubleoFeedExporter writes the public-disk catalog JSONL feed; default path feeds/ameubleo/catalog.jsonl.
meduse:module:ameubleo:export-menu-feedMinute 15 every six hoursAmeubleoMenuFeedExporter writes the public-disk menu JSONL feed; default path feeds/ameubleo/menu.jsonl.
meduse:module:ameubleo:export-attributes-feedMinute 30 every six hoursAmeubleoAttributesFeedExporter writes the public-disk attributes JSONL feed; default path feeds/ameubleo/attributes.jsonl.

The defaults are configurable through the module config/environment; the effective deployed paths and tenant are not established here.

Logidav ​

Each entry checks ps xf. These declarations do not add scheduler withoutOverlapping() locks.

CommandTimingHandler and downstream work
meduse:module:logidav:generate-sync-jobsEvery minuteScans Logidav FTP new-product/pending, copies a file locally, moves it to FTP processing, then pushes ProcessNewProduct to process-new-product; see the new-product handoff.
meduse:module:logidav:sync-product-from-logidavEvery minuteReads product-update CSVs from Logidav FTP, applies catalog product attribute changes, moves files to complete/failed, and pushes Menzzo ExportProducts to export.
meduse:module:logidav:sync-product-to-logidavEvery minuteBuilds and sends product export files to Logidav FTP for the selected/all products. This is an inline command handler, not a Laravel queue consumer.
meduse:module:logidav:sync-stock-from-logidavEvery 30 minutesReads export-stock CSVs, replaces the central availability tracking data, and emits AvailabilityUpdateDetected. The Mosaikasa listener dispatches Menzzo's ProcessAvailabilityUpdateJob to the connection's default queue; see queue flow and the stock workflow.
meduse:module:logidav:sync-price-from-logidavEvery five minutesReads Logidav price exports, updates Menzzo/MeublePromo/Mosaikasa product raw values, deletes processed FTP input files, and records tracked-job output.
meduse:module:logidav:sync-qty-from-logidavMinute 0 every six hoursReads Logidav quantity CSVs and updates catalog_product.qty; row/file failures are logged and written into the FTP CSV error column where possible.
shopify:manage-product-statusEvery four hoursCalls Mosaikasa ShopifyService to generate status JSONL and submit a Shopify bulk status mutation, or records it in the custom bulk worklist when another mutation is running. This command is also scheduled by Mosaikasa.

MeublePromo and Menzzo ​

These providers check ps xf; no scheduler overlap lock is declared.

ModuleCommandTimingHandler and downstream work
MeublePromomeublepromo:products-exportEvery minuteCalls the MeublePromo ExportProducts job with dispatchSync(), so this scheduled invocation runs its handler inline.
Menzzomenzzo:products-exportEvery minuteCalls the Menzzo ExportProducts job with dispatchSync(), so this scheduled invocation runs its handler inline.
Menzzomenzzo:vimeo:sync-product-storiesDailyCalls VimeoService::sync() to fetch Vimeo data and update the product_stories attribute.

Mosaikasa ​

Each entry checks ps xf; no scheduler overlap lock is declared by this provider.

CommandTimingHandler and downstream work
shopify:update-all-products-priceDaily at 00:30ShopifyService builds price JSONL, uploads it to Shopify, and records the bulk operation or adds a QUEUED row to shopify_bulk_operations if a mutation is already running.
shopify:check-bulk-operationsEvery five minutesPolls the Shopify bulk-operation status and updates shopify_bulk_operations. It is also scheduled by the application kernel every ten minutes with additional controls.
shopify:manage-product-statusEvery four hoursBuilds status JSONL and submits a Shopify bulk status operation or records a QUEUED row. It is also scheduled by Logidav every four hours.
shopify:manage-product-stockEvery four hoursUpdates Shopify inventory quantities through inventory mutations. Its optional quantity-tracking bulk operation is not enabled by this schedule because no option is passed.
mosaikasa:update-availability-with-bulk-operationEvery two hoursBuilds availability JSONL and submits a Shopify bulk metafield mutation, recording a deferred operation when another bulk mutation is active.
shopify:sync-products-from-shopifyDailyFetches Shopify product/variant data and updates matching Shopify connector resource URLs in Meduse.
mosaikasa:tag-collections-with-active-productsDailyReads Shopify collection product status and updates catalog_category.has_active_product for categories and ancestors.
mosaikasa:sync-product-availabilityDailyCompares tenant products with central availability data, then runs Menzzo's ProcessAvailabilityUpdateJob with dispatchSync(), applying Meduse catalog updates inline. This command does not enqueue Mosaikasa's UpdateAvailabilityJob.

Merchant Center ​

All entries use withoutOverlapping() and append output to storage/logs/scheduled_tasks.log. These schedules have no ps xf process-list guard. The effective feature flags are deployment configuration and were not read.

CommandTimingGateHandler and downstream work
merchant-center:google-shopping-products --setMerchantId=5064260817DailyAlways declaredSends MeublePromo merchant product data through the Merchant Center command/service path.
merchant-center:google-shopping-products --setMerchantId=5532935661DailyAlways declaredSends Mosaikasa merchant product data through the Merchant Center command/service path.
merchant-center:sync-mosaikasa-es --no-url-check06:00 UTC dailymerchantcenter.mosaikasa_es_enabled; config default is falseBuilds Spanish Mosaikasa product inputs and uploads batches through MerchantApiService. The command enforces its source/shipping readiness checks unless configured to bypass shipping verification.
merchant-center:verify-mosaikasa-es08:00 UTC dailymerchantcenter.mosaikasa_es_enabled; config default is falseReads Spanish Merchant Center products back, compares mapped fields/issues, and records a clean full-readback marker only on a clean full run.
merchant-center:cleanup-mosaikasa-es --apply09:00 UTC dailymerchantcenter.mosaikasa_es_cleanup_enabled; config default is falseDeletes stale Spanish product inputs only after its full-upload, matching clean-readback, source, language/feed, and catalog checks pass.
merchant-center:check-disabled-products --merchantId=5532935661DailyAlways declaredChecks remote Mosaikasa Merchant Center products against Meduse state, records a local CSV, and can remove remote entries that are disabled in Meduse.

The two feature flags come from MERCHANT_ES_SYNC_ENABLED and MERCHANT_ES_CLEANUP_ENABLED. No .env file or deployed flag value was inspected.

Consequential source findings ​

  • shopify:check-bulk-operations is declared twice: every five minutes in Mosaikasa and every ten minutes in the application kernel. The kernel entry adds overlap/one-server/background controls; the module entry only has its process-list registration check.
  • shopify:manage-product-status is declared in both Logidav and Mosaikasa, each every four hours with a process-list registration check and no scheduler overlap lock.
  • The kernel's seven queue:work examples and the MerchantLabels scheduled-job line are comments, not active schedule entries. The Logidav queued command-job example is also commented.
  • The source includes file deletion, catalog writes, Merchant Center updates/deletions, and Shopify mutations. These are handler behaviors, not evidence that any schedule has run or that production inputs are safe.

Evidence gaps ​

The source review does not establish the host cron/service that invokes schedule:run, the runtime set of booted providers, deployed feature flags, queue workers, current remote state, or the outcome of any FTP/API/database operation. Review deployment and owner acceptance separately before treating any entry as operationally active.

Internal developer documentation for Menzzo systems.