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!
- 1414 megtekintés
Hozzászólások
sleep 5s ?
- A hozzászóláshoz be kell jelentkezni
#!/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.
- A hozzászóláshoz be kell jelentkezni
Vagy maradhat a &, es sleep ele egy kill -9 $!. Az se szep mondjuk... :P
- A hozzászóláshoz be kell jelentkezni
indul=$(date +%s)
interv=$1
_itt_futtatsz_amit_akarsz_
futas=$(($(date +%s)-$indul))
[ $futas -lt $interv ] && sleep $(($interv-$futas))
- A hozzászóláshoz be kell jelentkezni
- A hozzászóláshoz be kell jelentkezni
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 hozzászóláshoz be kell jelentkezni
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)
- A hozzászóláshoz be kell jelentkezni
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
- A hozzászóláshoz be kell jelentkezni