[megoldva] programfuttatás automatizáló/ütemező kb. 10 mp-enkénti futtatásra

Fórumok

Sziasztok!

Egy olyan programra/szkriptre volna szükségem, ami képes arra, hogy
- X másodpercenként meghívjon lefuttasson egy szkriptet
- X 5-60 között változtatható legyen
- lehetőleg minnél kevesebbet csúszkáljon az időablak +/- 1 mp belefér, lehetőleg több ne legyen

A cron legjobb tudásom szerint min. 1 perces intervallumokat vár, úgyhogy az nem nyert. Ha egy mód van rá, C kód írását elkerülném, biztos megcsinálta már valaki nálam okosabb.

előre is köszönöm a segítséget!

Hozzászólások


#!/bin/bash

while [ 1 ];
do
    parancs &;
    sleep 5s;
done
exit 0

mondjuk ha a parancs hosszabb ideig futna, mint a sleep, akkor párhuzamosan több is fog belőle futni és esetleg keresztbe tesznek egymásnak. ebben az esetben a parancs után hagyd le az & jelet.


indul=$(date +%s)
interv=$1
_itt_futtatsz_amit_akarsz_
futas=$(($(date +%s)-$indul))
[ $futas -lt $interv ] && sleep $(($interv-$futas))

Első ötletem a scriptnek az inittab-ból respawn-nal hívása lett volna, az azonban 2 percen belül legfeljebb 10 alkalommal indítja újra a kérdéses parancsot, tehát csak akkor jó, ha x>12s - ami itt nem teljesül, ergo neked kelll gondoskodnod arról, hogy a scripted "végtelenítve" fusson, pl. úgy, hogy egy fájl létezését vizsgálod egy while ciklusban.

a csúszást hogy érted? (legyen X=30)
- amikor a kismutató függőlegesen áll akkor kell indulnia a szkriptnek (+-1s), vagy ha egyszer :01-kor indult a következő indulás :31+-1s legyen?
- beleszámít a szkript futási ideje? (tehát pl egyszerre kettő futhat?)

ettől függetlenül a fentebbi válaszokhoz kiegészítésként egy megoldás:
szkript indlása előtt eltárolod az időt, befejezésekot megnézed X-ből még mennyi van hátra, aztán annyit sleepelsz (ez megoldja azt ha a maradék idő negatív)

kösz mindenkinek a segítséget, a nyertes megoldás ez lett:


#!/bin/bash
interval=30

while true;
do
start=$(date +%s)

#DO STUFF

now=$(date +%s)
sleeptime=$(($interval-$now+$start))

sleep $sleeptime

done
exit 0