Geplande taken mislukken in een container wanneer de planner, omgeving, gebruiker, tijd, of het vereiste runtimepad afwijkt van de werkende hostcontext.
Een opdracht die in een interactieve shell op de host slaagt, kan afhankelijk zijn van het PATH, het loginprofiel, de tijdzone, gekoppelde bestanden, referenties, DNS of een langdurig actieve cron-daemon van de host. In een container is niets daarvan gegarandeerd. Begin met aantonen dat er een plannerproces actief is en voer vervolgens de exacte taak uit met dezelfde minimale omgeving en gebruiker die cron gebruikt.
Controleer of er daadwerkelijk een plannerproces actief is
Inspecteer de actieve processen en de opstartopdracht van de container. Het installeren van cronpakketten in de image start de daemon niet, en een container voert normaal gesproken alleen het geconfigureerde entrypoint of de geconfigureerde opdracht uit.
De langdurige Docker-crondiscussie op Stack Overflow draait om de noodzaak om een planner in de container uit te voeren, in plaats van aan te nemen dat de hostservice de crontab ervan beheert. De eerste onderscheidende controle is of het cronproces actief is wanneer het geplande tijdstip aanbreekt.
Als er geen planner actief is, kies dan bewust een ontwerp: voer cron of een containerbewuste planner uit als foregroundproces, gebruik een afzonderlijke taakcontainer of laat host-cron de applicatiecontainer aanroepen. Voeg geen tweede onbeheerde daemon toe zonder te bepalen hoe deze logt en stopt.
Voer de exacte opdracht uit met een minimale omgeving
Kopieer de geplande opdracht en voer deze in de container uit als de beoogde taakgebruiker, met een uitgeklede omgeving. Leg stdout, stderr, de afsluitcode, de huidige map en omgevingsvariabelen vast.
Cron-taken in containers mislukken vaak omdat cron het profiel van de interactieve shell niet laadt, waarin PATH, programmeertalen, API-tokens of applicatievariabelen zijn ingesteld. Een op containers gerichte plannerhandleiding benadrukt het behouden van de vereiste taakomgeving als een kernvereiste.
Als de opdracht alleen in de minimale omgeving mislukt, voeg dan expliciete absolute paden en uitsluitend de benodigde variabelen toe. Vermijd het inladen van een volledig gebruikersprofiel dat ongerelateerde aliassen, prompts of geheimen introduceert.
Controleer PATH, shell, werkmap en gebruiker
Vervang relatieve opdrachten en bestandspaden door absolute paden. Controleer of de geselecteerde shell bestaat en of de syntaxis van de crontab overeenkomt met de cron-implementatie die in de image is geïnstalleerd.
Voer de taak uit als de geconfigureerde cron-gebruiker en test lees-, schrijf- en uitvoertoegang tot scripts, configuratie, sockets en uitvoermappen. Een handmatige test met rootrechten bewijst niet dat een geplande taak zonder verhoogde rechten kan worden voltooid.
Stel de werkmap in de opdracht of het wrapper-script in. Als de taak alleen slaagt nadat je de map of gebruiker hebt gewijzigd, leg die expliciete context dan vast in versiebeheer in plaats van te vertrouwen op de standaardinstellingen van de container.
Vergelijk de tijd en tijdzone van de container met het schema
Toon de huidige tijd, tijdzone en eerstvolgende geplande uitvoering in de container. Containers delen de kernelklok van de host, maar kunnen UTC of andere tijdzonebestanden gebruiken voor de weergave en interpretatie door cron.
Een geval op Server Fault laat zien hoe de containertijd een andere tijdzone kan weergeven, zelfs wanneer de host lokale tijd toont, waardoor een correcte crontab op het verkeerde schijnbare lokale uur wordt uitgevoerd.
Kies één expliciete strategie voor tijdzones en controleer deze na het opnieuw aanmaken van de container. Compenseer dit niet door de cronexpressie te verschuiven terwijl de onderliggende tijdzone onduidelijk blijft, want wijzigingen in zomertijd of de image kunnen het tijdstip opnieuw verschuiven.
Controleer koppelingen, geheimen, netwerktoegang en de levensduur van de container
Controleer of elke invoermap, uitvoermap, elk geheim, elke socket en elk configuratiebestand tijdens de uitvoering in de container bestaat. Test vervolgens DNS-, database-, API- of NAS-toegang vanaf hetzelfde containernetwerk.
Host-cron kan hostpaden zien die in de container ontbreken. Een Nextcloud Docker-geval laat zien hoe een achtergrondtaak geconfigureerd kan lijken, terwijl de daadwerkelijke containeropdracht, gebruiker of het applicatiepad nog steeds de verwachte uitvoering op de achtergrond verhindert.
Controleer ook of de container actief blijft wanneer het geplande tijdstip aanbreekt. Kortlevende applicatiecontainers en vervangingen tijdens implementaties kunnen een interne planner beëindigen voordat langdurige of zeldzame taken zijn voltooid.
Kies één planningsgrens en bewijs dat deze onbeheerd werkt
Gebruik één eigenaar voor de planning: host-cron die docker exec aanroept, een speciale plannercontainer of een foregroundplanner in de applicatie-image. Dubbele planners kunnen dezelfde onderhoudstaak twee keer uitvoeren.
De ZimaSpace-handleiding voor DNS-tests aan de containerzijde behandelt een mogelijke onderliggende oorzaak wanneer de planner start maar geen verbinding kan maken met een andere service.
Het probleem is pas opgelost wanneer de taak op het bedoelde tijdstip wordt uitgevoerd na het opnieuw aanmaken van de container en een herstart van de host, vastgelegde logs oplevert, de verwachte gebruiker en paden gebruikt en het geverifieerde applicatieresultaat creëert. Een handmatig geslaagde opdracht is niet de voltooiingstest.
Ondersteuning & Tips
Meer om te lezen

Waarom herstelt een Docker-volume de bestandsinhoud, maar gaan uitgebreide bestandskenmerken verloren?
Een diagnose van volumeterugzetting met een inventaris van xattrs, tar- en Rsync-opties, naamruimten, ondersteuning voor bestemmingen, machtigingen, labels, app-metagegevens en tests.

Waarom behoudt een actieve container zijn oude geheugenlimiet nadat het Compose-bestand is gewijzigd?
Een diagnose van geheugenlimieten met aandacht voor actieve cgroups, herstarten versus opnieuw aanmaken, Compose-velden, harde en zachte limieten, bovenliggende scopes, swap en runtime-heaps.

Waarom maakt het herstarten van een reverse proxy elke sessie voor één zelfgehoste app ongeldig?
Een diagnose van sessieverlies met aandacht voor de reikwijdte van herstarts, cookie-eigenaarschap, geheimenrotatie, cachegestuurde sessies, sticky routing, authenticatiegateways en herstel.

