Ja. Cron op de host of een systemd-timer kan een eenmalige containeropdracht uitvoeren, maar moet daarvoor de omgeving, identiteit, het netwerk en de vergrendelingsregels van de toepassing reproduceren.
Dit wordt een echte compatibiliteitskwestie wanneer een zelfgehoste app periodieke opschoning, indexering, export of back-up nodig heeft zonder een cron-daemon aan de applicatiecontainer toe te voegen. Begin met een wegwerp-pad of -account, houd de vorige werkende toestand beschikbaar en beoordeel het ontwerp op basis van de oorspronkelijke workload, niet op basis van een eenmalige verbindingstest.
Definieer het contract voor planning en levenscyclus
De ondersteunde variant is een idempotente eenmalige opdracht die met dezelfde projectconfiguratie wordt gestart. De concurrerende variant is een hosttaak zonder omgeving, werkdirectory, vergrendeling of gereedheid van de service. Leg versies, identiteiten, adressen, mountpaden, machtigingen en de huidige waarneembare toestand vast voordat je een van beide varianten wijzigt.
Het relevante gedrag van container exec vormt de eerste compatibiliteitsgrens. Gebruik dit om de bewering af te bakenen en verifieer vervolgens hetzelfde gedrag op precies deze thuisserver, in plaats van een gedocumenteerde functie te beschouwen als bewijs dat het volledige ontwerp werkt.
Schrijf de beslisregel vóór het testen: succes moet betekenen dat de taak de bedoelde service bereikt, onveilige overlap weigert, naar de verwachte volumes schrijft en een zichtbare fout met een niet-nulstatus oplevert; falen omvat dat de opdracht een ander project gebruikt, geheimen verliest, vóór afhankelijkheden start of dat twee uitvoeringen dezelfde toestand wijzigen. Zo voorkom je dat een gedeeltelijke verbinding of een schone beëindiging van de opdracht ten onrechte als end-to-end-compatibiliteit wordt geïnterpreteerd.
Voer de taak uit met de productie-identiteit
Gebruik één gecontroleerde onderscheidende test: voer de exacte opdracht handmatig uit als de geplande hostgebruiker, leg de omgeving en afsluitstatus vast en start vervolgens twee overlappende wegwerpexecuties. Houd de client, workload, bestandsset, account en timing gelijk, zodat het gewijzigde onderdeel de enige aannemelijke verklaring is.
Gebruik de crontab-omgevingsregels om te bepalen welke tweede observatie voor dit pad van belang is. Leg beide kanten van de transactie vast: resolver of route, onderhandeld protocol, procesidentiteit, afsluitstatus, latentie, overgedragen bytes en eventuele herstelactie.
Herhaal de test na de in de titel genoemde levenscyclusgebeurtenis: opnieuw aanmaken, opnieuw verbinden, opnieuw mounten, herstarten, failover of een clientwijziging. Een ontwerp dat alleen werkt zolang oude sockets, caches of inloggegevens warm blijven, is niet geslaagd.
cd /srv/app && flock -n /run/app-job.lock docker compose exec -T app app-cli job
Interpreteer overlap, fouten en afsluitstatus
GESLAAGD: de taak bereikt de bedoelde service, weigert onveilige overlap, schrijft naar de verwachte volumes en levert een zichtbare fout met een niet-nulstatus op. Bewaar de exacte versies en topologie die deze toestand hebben opgeleverd, omdat de conclusie op die omstandigheden van toepassing is en niet op elke implementatie van het protocol.
MISLUKT: de opdracht gebruikt een ander project, verliest geheimen, start vóór afhankelijkheden of twee uitvoeringen wijzigen dezelfde toestand. Controleer gedeelde afhankelijkheden zoals DNS, MTU, identiteit, firewallstatus, opslaglatentie en gecachte sessies voordat je een van beide primaire varianten verantwoordelijk stelt.
UITZONDERING: schakel de planning uit, herstel de vorige taakdefinitie en voeg expliciete projectpaden, vergrendeling, time-out en statuscontroles toe. Breid machtigingen niet uit, verwijder geen brongegevens, verzwak de transportbeveiliging niet en vervang werkende opslag niet totdat een reproduceerbare observatie heeft vastgesteld welke grens is mislukt.
Controleer de volgende geplande uitvoering, niet alleen de eerste
Pas alleen de actie toe die bij de waargenomen variant past en voer vervolgens de oorspronkelijke workload opnieuw uit. Behoud het ontwerp alleen wanneer de taak de bedoelde service bereikt, onveilige overlap weigert, naar de verwachte volumes schrijft en bij twee relevante levenscycluscycli en onder de verwachte gelijktijdige belasting een zichtbare fout met een niet-nulstatus oplevert.
Gebruik de beleid voor het opnieuw starten van services om de dichtstbijzijnde afhankelijke workflow te verifiëren. Het toegangs-, timing- en herstelgedrag daarvan moet ongewijzigd blijven terwijl het nieuwe ontwerp actief is.
Stop en keer terug naar de opgeslagen toestand als de opdracht een ander project gebruikt, geheimen verliest, vóór afhankelijkheden start of twee uitvoeringen dezelfde toestand wijzigen. Schaal op met tijdstempels, exacte versies, route- of mountbewijs en de kleinst mogelijke reproductie, in plaats van nog een workaround toe te voegen.
Controleer het resultaat aan de hand van de statuscontroles van containers, zodat het risico niet alleen naar een andere netwerk-, identiteits-, back-up- of opslaglaag wordt verplaatst.
Voor door de host geplande containertaken is het gekwalificeerde antwoord daarom het oordeel uit het begin, en geen onvoorwaardelijk ja. De waarneembare geslaagde toestand is de acceptatielijn; de mislukte toestand is de terugdraaiflijn.
Veelgestelde vragen
Moet cron docker exec of docker compose run gebruiken?
Gebruik exec voor een opdracht binnen de actieve service; gebruik een eenmalige run wanneer de image een geïsoleerde taakcontainer ondersteunt.
Waar moeten logs van geplande taken naartoe?
Stuur stdout en stderr naar een bewaard hostlog of monitoringpad en geef een waarschuwing bij een niet-nulafsluiting.
Wat gebeurt er tijdens een app-update?
Pauzeer de timer of blokkeer deze, zodat hij niet kan overlappen met migraties, back-upbevriezingen of het vervangen van containers.
Ondersteuning & Tips
Meer om te lezen

Kan een zelfgehoste galerij de koppeling van Apple Live Photos behouden?
Een voorwaardelijke beslissing voor een thuisserver voor het koppelen van Apple Live Photos, met gecontroleerde tests, interpretatie van resultaten, terugdraaien en gerichte veelgestelde vragen.

Kun je Google Takeout en back-ups van telefoons importeren in één fotobibliotheek?
Een voorwaardelijke beslissing voor een homeserver voor gecombineerde foto-import, met gecontroleerde tests, interpretatie van de resultaten, terugdraaien en gerichte veelgestelde vragen.

Kan Immich een externe bibliotheek gebruiken zonder eigenaar van de bestanden te worden?
Een voorwaardelijke beslissing voor een thuisserver over eigenaarschap van externe bibliotheken in Immich, met gecontroleerde tests, interpretatie van resultaten, terugdraaien en gerichte veelgestelde vragen.

