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.