Files
WCX/docs/scheduled-update.md
2026-07-20 16:39:11 +02:00

3.8 KiB

Schemalagd WCX-uppdatering

Syfte

Systemd-jobbet uppdaterar regelbundet WCX-projektets lokala sajtindex och facitdatabas samt behandlar väntande OCR-poster. Jobbet körs som användaren urban.

Systemd startar först:

  • /storage/disk1/WCX/scripts/scheduled_update_wcx.sh

Wrappern avgör om en uppdatering ska göras och anropar därefter:

  • /storage/disk1/WCX/scripts/update_wcx.sh

update_wcx.sh hämtar sajtindexet, importerar metadata till SQLite och kör OCR-flödet.

Installerade systemd-filer

Konfigurationen består av:

  • service: /etc/systemd/system/wcx-update.service
  • timer: /etc/systemd/system/wcx-update.timer
  • miljöfil: /etc/wcx/update-wcx.env

Servicen körs som urban. Miljöfilen innehåller GOOGLE_VISION_API_KEY och ska ägas av root:root med rättigheten 0600. Den faktiska API-nyckeln får aldrig läggas i Git, skrivas in i detta dokument eller visas i terminalutdata och loggar.

Exempel på miljöfilens format, utan verkligt nyckelvärde:

GOOGLE_VISION_API_KEY=<hemligt värde>

Schema och körningsskydd

Timern kontrollerar varje natt klockan 03:30 om jobbet ska startas:

OnCalendar=*-*-* 03:30:00
Persistent=true

scheduled_update_wcx.sh kontrollerar tidsstämpeln i database/last_scheduled_update. Den fullständiga uppdateringen körs endast om minst 47 timmar har gått sedan den senaste lyckade schemalagda körningen. Tidsstämpeln uppdateras först efter att update_wcx.sh har lyckats.

Persistent=true innebär att systemd försöker ta igen en missad kalenderkörning efter att datorn har varit avstängd. Wrapperns 47-timmarskontroll avgör då om själva uppdateringen behöver köras.

update_wcx.sh tar ett exklusivt, icke-blockerande flock-lås via database/update_wcx.lock. En ny körning avbryts om en annan uppdatering redan pågår.

Kontroll och validering

Kontrollera service och timer:

sudo systemctl status wcx-update.service
sudo systemctl status wcx-update.timer
sudo systemctl list-timers --all wcx-update.timer

Validera unit-filerna efter en konfigurationsändring:

sudo systemd-analyze verify \
    /etc/systemd/system/wcx-update.service \
    /etc/systemd/system/wcx-update.timer

Starta en manuell körning genom systemd:

sudo systemctl start wcx-update.service

Den manuella servicekörningen går genom scheduled_update_wcx.sh. Om mindre än 47 timmar har gått sedan senaste lyckade schemalagda körning avslutas den utan att starta en ny fullständig uppdatering.

Aktivera och starta timern:

sudo systemctl enable --now wcx-update.timer

Stoppa och inaktivera timern:

sudo systemctl disable --now wcx-update.timer

Att stoppa timern stoppar inte automatiskt en servicekörning som redan pågår. Kontrollera därför servicens status separat innan en pågående körning stoppas.

Loggar

Scriptens standardutdata och felutdata samlas av systemd-journalen. Jobbet skriver ingen separat loggfil.

Visa hela serviceloggen:

sudo journalctl -u wcx-update.service

Följ en pågående körning:

sudo journalctl -u wcx-update.service -f

Visa loggar från den aktuella uppstarten:

sudo journalctl -b -u wcx-update.service

Filer som jobbet skriver

En fullständig uppdatering kan skriva eller ersätta:

  • /storage/disk1/WCX/import/wcx_site_index.json.tmp
  • /storage/disk1/WCX/import/wcx_site_index.json
  • /storage/disk1/WCX/database/wcx.db
  • SQLite-journal- eller WAL-filer bredvid databasen
  • /storage/disk1/WCX/database/update_wcx.lock
  • /storage/disk1/WCX/database/last_scheduled_update

Sajtindexet skrivs först till en temporär fil och ersätter sedan den ordinarie JSON-filen. Import- och OCR-stegen uppdaterar facitdatabasen. Lockfilen används för att förhindra överlappande körningar, och tidsstämpelfilen används av wrappern för 47-timmarskontrollen.