OffVPSOFFSHORE VPSOndersteuning

Kleine automatiseringen

Geef een kleine geplande taak een duidelijke grens.

Een betrouwbare kleine taak heeft een duidelijke afronding, een registratie van het resultaat en een regel voor een te snel volgende tweede uitvoering. Kies die gedragingen voordat u een uur- of dagschema kiest.

OffVPS veldgids · Beoordeeld · 5 min leestijd

Definieer één eindig stuk werk

Stel u een persoonlijk hulpmiddel voor dat een kleine dagelijkse samenvatting opnieuw opbouwt uit zijn bestaande records. De taak leest een begrensde dataset, maakt één vervangende samenvatting en stopt. Het is geen webserver en zou niet moeten blijven draaien tussen geplande starts. Schrijf de invoer, bestemming, verwachte duur en wat als succes geldt op voordat u een timer toevoegt.

Het voorbeeld gaat uit van een Linux-host met systemd en util-linux flock, beheerderstoegang en een bestaand onbevoorrecht account en groep met de naam fieldjob. Het beoordeelde taakscript staat in /opt/field-jobs/build-summary en wordt op de voorgrond uitgevoerd. Een beheerder is eigenaar van dat script; het taakaccount kan het lezen en uitvoeren, maar de code niet herschrijven. Controleer uitvoerbare paden op uw distributie. Dit zijn sjablonen, geen geïnstalleerde OffVPS-planningsservice.

Het script moet een fout melden met een niet-nul exitstatus. Ontwerp het voor vervangende bestanden zo dat het een tijdelijk resultaat voorbereidt en controleert voordat het wordt gepubliceerd. Gebruik voor databasewerk het transactie- of deduplicatiemechanisme van de database. Een lock alleen kan een gedeeltelijk voltooide taak niet veilig herhaalbaar maken.

Kies een tijdzone en een beleid voor gemiste uitvoeringen

Onze samenvatting is één keer per dag nuttig om 02:15 UTC. Gebruik een expliciete zone zodat de lokale tijdzone van de machine geen onzichtbare afhankelijkheid is. UTC voorkomt seizoensgebonden klokwijzigingen in dit voorbeeld; een bedrijfstaak die aan lokale burgerlijke tijd is gebonden, vereist een benoemde tijdzone en een beoordeling van het zomertijdgedrag. De systemd-tijdreferentie beschrijft kalenderexpressies.

Sla deze template op als /etc/systemd/system/field-summary.timer op de beoogde VPS na controle van de namen:

[Unit]
Description=Daily personal-tool summary

[Timer]
OnCalendar=*-*-* 02:15:00 UTC
Persistent=true
Unit=field-summary.service

[Install]
WantedBy=timers.target

Persistent=true vraagt om een inhaalactivering na een inactieve periode als een kalendergebeurtenis is gemist. Het herhaalt geen afzonderlijke uitvoering voor elke gemiste dag. Een timer start ook geen tweede instantie van dezelfde service terwijl die service actief is. Deze gedragingen, en de nauwkeurigheid van de planning, worden behandeld in de timerreferentie. Bepaal of een late samenvatting nuttig is voordat u inhalen inschakelt.

Stel de servicegebruiker, statusmap en lock in

De bijbehorende /etc/systemd/system/field-summary.service beschrijft het werk:

[Unit]
Description=Build the personal-tool summary

[Service]
Type=oneshot
User=fieldjob
Group=fieldjob
WorkingDirectory=/opt/field-jobs
StateDirectory=field-summary
StateDirectoryMode=0700
UMask=0077
ExecStart=/usr/bin/flock --nonblock --conflict-exit-code 75 /var/lib/field-summary/job.lock /opt/field-jobs/build-summary
TimeoutStartSec=5min
StandardOutput=journal
StandardError=journal

Type=oneshot past bij een commando dat voltooit; een expliciete opstarttimeout begrenst dit voorbeeld. Voeg geen RemainAfterExit=yes toe aan een service die na elke uitvoering inactief moet worden. Zie systemd's servicesemantiek. Stel een timeout in op basis van de werkbelasting en maak onderbreking veilig in plaats van aan te nemen dat vijf minuten bij elke taak past.

Voor deze systeemservice StateDirectory maakt de genoemde map aan onder /var/lib met eigendom van de service. De werkmap, gebruiker, machtigingen en uitvoerbestemmingen zijn expliciet; het script moet absolute paden gebruiken voor zijn eigen hulpmiddelen en gegevens. Regels voor omgeving en mappen staan in systemd's uitvoeringsreferentie. Zet geen geheime waarden in command-line-argumenten en log ze niet.

De niet-blokkerende flock wrapper sluit af met code 75 wanneer een andere samenwerkende aanroep deze lock vasthoudt. We laten dat bewust een zichtbare fout blijven die beoordeling vereist, in plaats van een overgeslagen samenvatting als voltooid werk te behandelen. Alle handmatige aanroepen moeten dezelfde wrapper en hetzelfde lockpad gebruiken. Verwijder geen lockbestand om een draaiende taak vrij te geven: een nieuw bestand kan een aparte lock creëren. Dit is een patroon voor een lokaal bestandssysteem, geen gedistribueerde lock over VPS-instanties. Zie de upstream flock-handleiding.

Controleer de bestanden en probeer één gecontroleerde uitvoering

Gebruik een wegwerpbare dataset met uitgaande e-mail, betalingen en andere neveneffecten uitgeschakeld voor de eerste uitvoering. Controleer vóór activering het geparseerde schema en de unitbestanden op die testhost:

systemd-analyze calendar '*-*-* 02:15:00 UTC'
systemd-analyze verify /etc/systemd/system/field-summary.service /etc/systemd/system/field-summary.timer

Deze controles kunnen fouten in units en schema's opvangen; ze kunnen niet vaststellen dat uw script een correcte samenvatting produceert. De systemd-analyze-referentie legt hun bereik uit. Laad na het corrigeren van fouten de beoordeelde bestanden en start de testtaak expliciet:

sudo systemctl daemon-reload &&
  sudo systemctl start field-summary.service
systemctl status field-summary.service --no-pager
sudo journalctl -u field-summary.service --since "10 minutes ago" --no-pager

Verwacht een eindige succesvolle aanroep en een gecontroleerd uitvoerartefact; een succesvolle oneshot kan achteraf inactief tonen. Inspecteer het resultaat zelf, inclusief het gedrag bij lege invoer. Maak een test-only run opzettelijk traag, roep hetzelfde vergrendelde commando tweemaal aan op de testdataset, en verifieer dat de tweede aanroep lock-contention rapporteert zonder een concurrerend resultaat te schrijven.

Activeer het schema pas nadat u de uitvoer hebt gecontroleerd

sudo systemctl enable --now field-summary.timer
systemctl list-timers field-summary.timer --all

Controleer de volgende geplande tijd en bekijk vervolgens het eerste geplande resultaat. Houd starttijd, eindtijd, aantal verwerkte items en uitkomst bij in de logs van het script. Een ontbrekend succesrecord is een reden tot inspectie, niet het bewijs dat de job heeft gedraaid. Raadpleeg systemctl's timer- en activeringscommando's.

Om toekomstige starts te pauzeren, gebruik sudo systemctl disable --now field-summary.timer. Dat beëindigt een al draaiende service niet. Als onderbreking nodig is, stel eerst vast of de huidige schrijfactie veilig kan stoppen. Naarmate het werk groeit, beoordeel de duur, retries en externe API-limieten; meerdere machines vereisen gedeelde coördinatie. Ga verder met het scenario voor persoonlijke tools en een hersteloefening voor de data die deze automatisering onderhoudt.

Gebruikte documentatie

Primaire referenties voor deze pagina. Controleer de documentatie voor de versie die in uw eigen omgeving is geïnstalleerd.