systemd kérdés

Fórumok

Van egy fájl a neten amire szükségem van. Hektikus hogy mikor érhető el. Általában 8-10 óra között.
Van egy scriptem mely a dolgokat rendezi, viszont az automatizálást illetően lennének kérdéseim.
Jelenleg a systemd-vel zsonglőrködöm. A systemd minden fél órában meghívja a letöltő scriptemet.
RestartSec=1800s
Akkor is amikor már nem kellene. Mire gondolok?

A script ellenőrzéseket végez. A legfrissebb fájl van nálam, vagy sem?
Ha igen akkor kilép. A systemd le is állhatna. Nem kell hogy újrainduljon 1800s múlva.

Viszont ha nem a legfrissebb fájl van nálam, de még nem elérhető, akkor fél óra múlva újra meg kell próbálni.
Ez max 4 ellenőrzés 8-10 óra közötti intervallumot tekintve.
StartLimitBurst=4 - jól gondolom?

Ha elérhető, akkor letölti a legfrissebbet és kilép. A sytemd le is állhatna. Nem kell hogy újrainduljon 1800s múlva.

A lényeg hogyha már megvan a legfrissebb fájl, akkor már nem kell meghívni a letöltő scriptet.
Aznap már nincs rá szükség.

Azt tudni kell, hogy nálam nem megy 0-24 a gép, napközben is többször kikapcsolom.

Most eszközöltem néhány beállítást, de nem tudom hogy jó-e ez így?
Azt tudni kell hogy én a gépemet gyakram kapcsolom be/ki naponta többször is.

Tehát most így van a systemd:
 

[Unit]
Description=Bla bla
Wants=NetworkManager-wait-online.service
After=NetworkManager-wait-online.service
StartLimitIntervalSec=1d
StartLimitBurst=4

[Service]
ExecStart=/bin/bash -c %h/.scripts/bin/"download_file -s"
Restart=on-failure
RestartSec=1800s

[Install]
WantedBy=default.target

A Restart=on-failure helyett always volt, de valahol olvastam hogy az nem feltétlenül jó ebben az esetben. 

Hozzászólások

Ez most systemd tanulási projekt, vagy sima megoldandó feladat? Nem vagyok systemd szakértő (sem), de még systemd-ben sem ez a legjobb út szerintem. Ott vannak a timer unit-ok, inkább az való ilyen időzített/ismétlődő feladatra, nem a service futtatás/újraindítás megerőszakolása.

Vagy csak sima cron...

Az meg szerintem túlbonyolítás, hogy le akarod állítani az időzített feladatot, ha már megvan a friss állomány. Semmi erőforrás nem kell ahhoz, hogy ellenőrizz fél óránként, megvan-e a friss állomány, és kilépj, ha nincs, vagy script-ben maradj, ha meg kell szerezni. Egyszerűbb az ellenőrzést úgy megcsinálni, hogy ha nincs dolga, gyorsan kilépjen (pl. leteszel egy flag-et /tmp-be a friss adat sikeres letöltése után, és ha ott a flag, már lép is ki azonos dátum esetén, ha napi gyakoriságú a változás).

Ráadásul ha úgy alakítod ki az egészet, hogy "naponta van friss állomány" (mondjuk a fájlnévben lévő dátumból tudod, friss-e), akkor azzal bezárod magad a napi max. 1 frissítésre, és újra kell gondolni, ha sűrűbben lenne friss infó a jövőben.

Nem tudom, a szerveren nézve hogyan derül ki, frissebb-e mint a helyi. De valami unixtime-ot tennék a fájlnévbe vagy mellé egy állományba, fél óránként nézzen rá, hogy ami elérhető, abban frissebb-e ez az idő, mint ami nálad van. Ha frissebb, letölti, ha nem, akkor kilépés. Így tetszőleges gyakoriságú lehet az adatküldés ha erre igény keletkezik. Az idítást meg beteheted úgy (akár cron, akár systemd timer), hogy boot-kor és fél óránként. Így a napi több leállítás-indítás között kiesett időre is boot után azonnal megvan a cselekvés, egyébként meg fél óránként, ha be van kapcsolva a gép.