Pak workeren
Brug en understøttet runtime, fastlåste afhængigheder og en tjenestestyring eller container. Konfigurer genstartsgrænser og en dedikeret tjenestebruger. Opbevar private udbyderlegitimationsoplysninger i beskyttet konfiguration uden for applikationens offentlige filer.
Gem fremdrift, før handlinger får betydning
Brug en holdbar kø eller database til job. Tildel en unik operationsidentifikator, registrer eksterne anmodninger, og afstem usikre resultater. En genstart bør ikke sende en anden e-mail, oprette en anden ordre eller opkræve betaling to gange.
Tilføj nyttig observerbarhed
Overvåg jobfuldførelse, køalder, fejlrate og omkostning i stedet for kun at tjekke, om en proces findes. Hold logfiler små nok til at gennemgå, og rediger tokens, prompts og dokumenter, der ikke behøver at blive opbevaret.
Sæt et klart loft
Begræns modelforbrug, browserparallelitet, køretid og antal forsøg. Hold en nem pauseknap og en menneskelig gennemgangsvej for konsekvensrige handlinger. En mindre, velovervåget worker er lettere at stole på end en ubegrænset.
Brug en supervisor og en bevidst tidsplan
Systemd og Docker er almindelige måder at få en proces til at overleve en afbrudt terminalforbindelse. For en systemd-tjeneste kan Type=exec rapportere udførelsesfejl mere direkte end en simpel baggrundsstart, og Restart=on-failure kan genstarte fejl med en afgrænset politik. Planlagte job bør undgå overlappende kørsler. Hold arbejdsmappen, tjenestebrugeren og miljøet eksplicit. Eksemplet forudsætter, at brugeren koala-agent, det virtuelle miljø, worker-modulet og den private miljøfil allerede findes; tilpas dem, før du installerer en unit.
- Brug en dedikeret tjenestekonto
- Indstil en genstartsforsinkelse og en grænse for fejl
- Kontrollér den forrige jobtilstand, før du starter en planlagt kørsel
[Unit]
Description=Example agent worker
After=network-online.target
[Service]
Type=exec
User=koala-agent
WorkingDirectory=/opt/koala-agent
EnvironmentFile=/etc/koala-agent.env
ExecStart=/opt/koala-agent/.venv/bin/python -m worker
Restart=on-failure
RestartSec=10
NoNewPrivileges=true
[Install]
WantedBy=multi-user.targetOfficiel dokumentation: Systemd-tjenestesemantik
Sæt et dagligt budget og en grænse for dubletter
Giv workeren et maksimalt antal forespørgsler, en udgiftsgrænse og en eksekveringstimeout. Brug en holdbar idempotensregistrering til handlinger, der påvirker omverdenen. Et vellykket browserklik kan forekomme, før processen modtager et svar; undersøg den eksterne tilstand, før du prøver igen. Docker Compose-hemmelighedsmounts kan holde en hemmelighed ude af imaget, men tilladelser og den forbrugende applikation skal stadig gennemgås.
Officiel dokumentation: Docker Compose-hemmeligheder
Giv et periodisk job en eksplicit indhentningspolitik
Brug en langvarig service til en vedvarende kø-worker og en timer-udløst oneshot-service til en afgrænset planlagt opgave. Med en systemd-kalendertimer kan Persistent=true udløse én overset aktivering efter nedetid; det genskaber ikke en hel forretningsmæssig efterslæb. Beslut, om den indhentning er ønskelig. RandomizedDelaySec kan sprede opstarter, mens en lease på applikationsniveau forhindrer to replikaer i at behandle det samme planlagte arbejde.
- Registrer den tilsigtede tidszone, og inspicér de næste kørselstidspunkter, før du aktiverer tidsplanen.
- Hold opgavens eksekveringsfrist kortere end et interval, der ikke må overlappe, eller brug en holdbar lease med udløb og ejerskab.
- Lad jobbet vælge udestående arbejde ud fra gemt tilstand i stedet for at antage, at hver tidligere timerhændelse blev kørt.
- Kontroller den installerede systemd-version, før du bruger en direktiv fra den nyeste manual.
# Read-only checks after creating your own matching units.
systemctl list-timers --all
systemctl status koala-agent.service
journalctl -u koala-agent.service --since today --no-pagerOfficiel dokumentation: systemd: tidsplanlægning
Skeln en crash-loop fra en fastlåst worker
En genstartspolitik kan gendanne en mislykket proces, men gentagen brug af ugyldige legitimationsoplysninger eller en brudt migrering hvert par sekunder gør en fejl mere støjende. Begræns tjenestestarter, og alarmér ved gentagne fejl. En kørende proces kan også hænge: mål alderen på det ældste job og den sidst fuldførte operation. Test et API-udfald, en tom disk og et processtop med engangsjob, og kontroller derefter, at den varige tilstand forhindrer dublerede eksterne handlinger.
- Angiv et udbyderbudget og en anmodningstimeout i applikationen samt en CPU/hukommelsesgrænse på runtime.
- Docker-containere har ikke en nyttig arbejdsbelastningsspecifik hukommelsesgrænse, blot fordi de er containere; konfigurer og test grænser bevidst.
- Gem en hemmelighed uden for image og offentligt træ, og test derefter, at crashlogs og diagnostik redakterer den.
- Behold en manuel stopvej, og kræv passende gennemgang for udgifter, produktionsskrivninger eller eksterne beskeder.
Officiel dokumentation: systemd: serviceovervågning · Docker: ressourcebegrænsninger for containere