[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Alter einer Datei in Sekunden ermitteln


On Sat, Mar 26, 2011 at 01:36:00PM +0100, Markus Hochholdinger wrote:
> Am 25.03.2011 um 23:00 Uhr schrieb Raphael Eiselstein <rabe@xxxxxxxxx>:
> > AGE=$(( $(date +%s) - $(date +%s --date "$(stat --format %y /var/run/filename )") ))"

Das liess sich sogar noch vereinfachen zu 
AGE=$(( $(date +%s) - $(stat --format %Y /var/run/filename ) ))
(siehe Philipps Mail)


> > Gibts da schoenere Loesungen?
> echo $(( $(date +%s) - $(date +%s --reference /var/run/filename) ))

Man koennte also sagen, dass man die mtime einer Datei in Unix-Sekunden
mit GNU Bordmitteln entweder mit date oder mit stat bekommt. Das *Alter*
einer Datei muss man dann aber immernoch per Shell "berechnen". Und den
Rueckgabewert fuer einen Timeout muss man sich dann noch dazu bauen. 

Also gut: Ein "Watchdog" koennte also so aussehen, ausgehend von der 
Ueberlegung, dass im Normalbetrieb die Datei /var/run/foo.alive 
mindestens alle 60sec aktualisiert wird und bei Ueberschreiten von 
ca 70-80sec eingegriffen werden muss (aber nur dann):

------------------------------------------------------
#! /bin/bash

fileage_timeout()
{
        FILE_NAME="${1}"
        MAX_AGE="${2:-"65"}"

        test ! -e "${FILE_NAME}" && return 3
        test ${MAX_AGE} -lt 0 && return 2


        FILE_AGE=$(( $(date +%s) - $(stat --format %Y "${FILE_NAME}" ) ))
        if [ ${FILE_AGE} -ge ${MAX_AGE} ]; then
                # timed out
                return 0
        else
                # not timed out
                return 1
        fi
}

while true; do
        while sleep 10; do
                fileage_timeout /var/run/foo.alive 70 && break
        done

        notify
        foo restart
done
------------------------------------------------------
(script ungetestet, hab grad kein GNU-Linux zur Hand)

Man muss bei solchen Konstrukten allerdings aufpassen. Hier koennte es
zum Problem werden, wenn der restart von foo schnell wieder
"zurueckkommt", aber im Hintergrund eine Komponente noch 30sec braucht,
bis sie laeuft (und die Datei toucht). Hier koennte ein restart-Chaos
entstehen. Um das zu vermeiden waere ein "touch /var/run/foo.alive" nach
"foo restart" hilfreich, um der Komponente 70sec Zeit zum starten zu
geben. Ansich ein gefaehrliches Ding, sollte man auf jedenfall gut testen.


Gruss
Raphael
 
-- 
Raphael Eiselstein <rabe@xxxxxxxxx>               http://rabe.uugrn.org/
xmpp:freibyterægmx.de  | https://www.xing.com/profile/Raphael_Eiselstein   
GnuPG:                E7B2 1D66 3AF2 EDC7 9828  6D7A 9CDA 3E7B 10CA 9F2D
.........|.........|.........|.........|.........|.........|.........|..



-- 
UUGRN e.V. http://www.uugrn.org/
http://mailman.uugrn.org/mailman/listinfo/uugrn
Wiki: https://wiki.uugrn.org/UUGRN:Mailingliste
Archiv: http://lists.uugrn.org/