[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Alter einer Datei in Sekunden ermitteln
[Thread Prev] | [Thread Next]
- Subject: Re: Alter einer Datei in Sekunden ermitteln
- From: Raphael Eiselstein <rabe@xxxxxxxxx>
- Date: Sat, 26 Mar 2011 22:45:26 +0100
- To: uugrn@xxxxxxxxxxxxxxx
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/