Cron taken vergrendelen taken uit andere groepen
Dit artikel biedt een oplossing voor het probleem met de cloudinfrastructuur van Adobe Commerce met betrekking tot bepaalde cron -taken op lange termijn die andere cron -taken blokkeren.
Betrokken producten en versies
- Adobe Commerce on cloud Infrastructure Pro-planarchitectuur
- Aan boord vóór mei 2019
Probleem
In Adobe Commerce for cloud kunnen complexe cron taken (taken op lange termijn) andere taken vergrendelen. De taak van indexeerders herstelt bijvoorbeeld de ongeldig gemaakte indexen. Het kan een paar uur duren om te voltooien en het zal andere standaardtaken van cron vergrendelen, zoals het verzenden van e-mails, het genereren van sitemaps, klantmeldingen en andere aangepaste taken.
Symptomen :
De processen die worden uitgevoerd door cron -taken worden niet uitgevoerd. Productupdates worden bijvoorbeeld niet gedurende uren toegepast of klanten melden geen e-mails te ontvangen.
Wanneer u de databasetabel cron_schedule
opent, ziet u de taken met de status missed
.
Oorzaak
Eerder, in onze wolkenomgeving, werd de server Jenkins gebruikt om cron banen in werking te stellen. Jenkins voert slechts één instantie van een taak tegelijk uit. Er wordt dus slechts één bin/magento cron:run
-proces tegelijk uitgevoerd.
Oplossing
-
De steun van Adobe Commerce van het contact 🔗 om zelf-geleid crons toegelaten te hebben.
-
Bewerk het
.magento.app.yaml
-bestand in de hoofdmap van de code voor Adobe Commerce in de Git -vertakking. Voeg het volgende toe:code language-yaml crons: cronrun: spec: "* * * * *" cmd: "php bin/magento cron:run"
-
Sla het bestand op en druk updates naar de omgevingen voor Staging en Productie (net als bij Integratieomgevingen).
cron:run
aanwezig zijn in het nieuwe cron -schema. De normale cron:run
taak, toegevoegd zoals hierboven beschreven, is voldoende. Het is echter wel verplicht om aangepaste taken over te dragen als u die hebt.Controleren of u de functie voor zelfbeheer van cron hebt ingeschakeld (alleen voor Staging en productie in Cloud Pro)
Als u wilt controleren of de zelfbeheerde cron is ingeschakeld, voert u de opdracht crontab -l
uit en bekijkt u het resultaat:
-
Self-managed cron is ingeschakeld als u de taken kunt zien, zoals in het volgende voorbeeld:
code language-bash username@hostname:~$ crontab -l # Crontab is managed by the system, attempts to edit it directly will fail. SHELL=/etc/platform/username/cron-run MAILTO="" # m h dom mon dow job_name * * * * * cronrun
-
Het zelf-beheerde cron wordt niet toegelaten als u niet de taken kunt zien en krijgt "u wordt niet toegestaan om dit programma"te gebruiken foutenmelding.
Gerelateerde lezing
- cron de banen van de opstelling 🔗 in onze ontwikkelaarsdocumentatie
- Beste praktijken voor het wijzigen van gegevensbestandlijstenin het Playbook van de Implementatie van Commerce