Discussion:
Script erst bei uptime >= 4 Stunden starten
(zu alt für eine Antwort)
Bernd Kuhlen
2004-09-16 08:08:47 UTC
Permalink
Hallo NG,
zu folgendem Problem habe ich weder in man-pages, noch beim googlen etwas
gefunden:

Ich habe ein Script, daß die Aktualität von diversen Server-Dateien testet.
Nun ist es so, daß ein Server, der offline war eine gewisse Zeit braucht,
bis alle Dateien up to date sind.
Mein Testskript läuft alle 15 min im crontab und sollte nicht 15 Minuten
nach der "Wiederauferstehung" des Servers X laufen.

Ich würde gerne eine Abfrage einbauen, ob der Server mind. 4 Stunden "UP"
ist bevor das Skript läuft, weil ich mir sonst die Tests, die das Skript
macht, sparen kann.

Aufgrund der vielen unterschiedlichen Formate von uptime (z.B. up 15:49, up
22 days) ist das aber keine triviale Aufgabe. Die manpage von uptime ist
leider sehr überschaubar. Optimal wäre eine Rückgabe der online-Zeit in
Sekunden.

Bin für Hinweise und Ideen sehr dankbar.

----

Gruß,
Bernd Kuhlen
Peter Blancke
2004-09-16 09:05:53 UTC
Permalink
Post by Bernd Kuhlen
Aufgrund der vielen unterschiedlichen Formate von uptime (z.B. up
15:49, up 22 days) ist das aber keine triviale Aufgabe. Die
manpage von uptime ist leider sehr überschaubar. Optimal wäre eine
Rückgabe der online-Zeit in Sekunden.
Dann werte doch mal den Inhalt von /proc/uptime aus. Das wird
helfen.

Gruss

Peter Blancke
--
Hoc est enim verbum meum!
Volker Moell
2004-09-16 09:09:49 UTC
Permalink
Post by Bernd Kuhlen
Aufgrund der vielen unterschiedlichen Formate von uptime (z.B. up 15:49, up
22 days) ist das aber keine triviale Aufgabe. Die manpage von uptime ist
leider sehr überschaubar. Optimal wäre eine Rückgabe der online-Zeit in
Sekunden.
Vielleicht hilft Dir ja /proc/uptime weiter:

$ uptime
11:09am up 13 days 13:18, 1 user, load average: 0.10, 0.12, 0.09

$ cat /proc/uptime
1171076.57 979616.94


-volker
--
http://die-Moells.de/ * http://Stama90.de/ * http://ScriptDale.de/

Reality is eighty million polygons a second.
Stefan Kopetzky
2004-09-16 09:27:23 UTC
Permalink
Post by Bernd Kuhlen
Aufgrund der vielen unterschiedlichen Formate von uptime (z.B. up 15:49, up
22 days) ist das aber keine triviale Aufgabe. Die manpage von uptime ist
leider sehr überschaubar. Optimal wäre eine Rückgabe der online-Zeit in
Sekunden.
Unter Linux geht das mit /proc/uptime

Aus der proc-Manpage:

uptime This file contains two numbers: the uptime of the
system (seconds), and the amount of time spent in
idle process (seconds).

Also z.B in der bash:

uptime=`awk '{print $1}' /proc/uptime`

Gruss
Stefan
--
Frau Torheit fiebert nach Verführung;
(AT Spr 9,13)
Bernd Kuhlen
2004-09-16 09:35:52 UTC
Permalink
Ich muss mich erstmal entschuldigen, daß ich vergessen habe mein OS
(FreeBSD) anzugeben und die Shell, die ich benutze, da eine Lösung des
Problems ja doch davon abhängt.

Es gibt bestimmt elegantere Lösungen. Ich habe es jetzt so gemacht:
(Abbruch ist eine Funktion, die als Grund des Abbruchs den String
Abbruchmeldung ausgibt)

jetzt=`date +%s`
onlinetime=`/sbin/sysctl kern.boottime | cut -f5 -d" " | cut -f1 -d","`
if [[ $onlinetime -gt 1000000000 && $jetzt -gt 1000000000 ]] ; then
diff=`expr $jetzt - $onlinetime`
if [ $diff -lt 14400 ] ; then # Rechner weniger als 4 Stunden online
echo -n "Rechner weniger als 4 Std online " >>$MAILFILE
echo -n "WICHTIG: www_check bricht ab zu kurzer online-Zeit ab"
$MAILFILE
echo -n $DATUM >>$MAILFILE
/usr/bin/mail -s $MAILSTRING ***@wetteronline.de <$MAILFILE
Abbruchmeldung=" !!! Bereche ab wegen zu niedriger Online-Zeit !!!"
Abbruch
fi
fi


Gruß,
Bernd Kuhlen
Oliver Lehmann
2004-09-16 13:39:14 UTC
Permalink
Post by Bernd Kuhlen
Ich muss mich erstmal entschuldigen, daß ich vergessen habe mein OS
(FreeBSD) anzugeben und die Shell, die ich benutze, da eine Lösung des
Problems ja doch davon abhängt.
Ok, wenn du dich auf FreeBSD festlegen willst:

if sysctl -n kern.boottime | awk -F'[ ,]*' '{ "date +%s" | getline now ;
if($4+14400>now) exit 1}' ; then
alles toll
else
noch keine 4h up
fi
--
Oliver Lehmann
http://www.pofo.de/
http://wishlist.ans-netz.de/
Jens Kubieziel
2004-09-16 10:27:23 UTC
Permalink
Post by Bernd Kuhlen
Aufgrund der vielen unterschiedlichen Formate von uptime (z.B. up 15:49, up
22 days) ist das aber keine triviale Aufgabe. Die manpage von uptime ist
leider sehr überschaubar. Optimal wäre eine Rückgabe der online-Zeit in
Sekunden.
***@qbiathome:~/ > cat /proc/uptime
9174.39 25.79
--
Jens Kubieziel http://www.kubieziel.de
FdI#229: Change-Management
Club der Ja-Sager. (Manfred Worm Schäfer)
Oliver Lehmann
2004-09-16 13:30:00 UTC
Permalink
Post by Jens Kubieziel
9174.39 25.79
***@nudel /root> stat /proc
stat: /proc: stat: No such file or directory
Exit 1
***@nudel /root>
--
Oliver Lehmann
http://www.pofo.de/
http://wishlist.ans-netz.de/
Christian Schneider
2004-09-16 13:38:39 UTC
Permalink
Post by Oliver Lehmann
Post by Jens Kubieziel
9174.39 25.79
stat: /proc: stat: No such file or directory
Exit 1
/compat/linux/proc/uptime (braucht man IIRC "linux compatablity") oder
halt ``sysctl -n kern.boottime'' (aber ich weiss was Du meinst).
Stefan Scholl
2004-09-16 16:47:15 UTC
Permalink
Post by Bernd Kuhlen
Ich habe ein Script, daß die Aktualität von diversen Server-Dateien testet.
Nun ist es so, daß ein Server, der offline war eine gewisse Zeit braucht,
bis alle Dateien up to date sind.
Mein Testskript läuft alle 15 min im crontab und sollte nicht 15 Minuten
nach der "Wiederauferstehung" des Servers X laufen.
Ich würde gerne eine Abfrage einbauen, ob der Server mind. 4 Stunden "UP"
ist bevor das Skript läuft, weil ich mir sonst die Tests, die das Skript
macht, sparen kann.
Ist es da nicht sinnvoller zu prüfen ob die Dateien up-to-date sind
oder nicht?

Je nach Daten könnte das ja unterschiedlich lange dauern. Und wenn
10 Leute auf dem Server heimlich einen ***@Home-Client installieren
dauert es vielleicht länger als 4 Stunden.
Thomas Orgelmacher
2004-09-17 11:53:26 UTC
Permalink
Post by Bernd Kuhlen
Hallo NG,
zu folgendem Problem habe ich weder in man-pages, noch beim googlen etwas
Ich habe ein Script, daß die Aktualität von diversen Server-Dateien testet.
Nun ist es so, daß ein Server, der offline war eine gewisse Zeit braucht,
bis alle Dateien up to date sind.
Mein Testskript läuft alle 15 min im crontab und sollte nicht 15 Minuten
nach der "Wiederauferstehung" des Servers X laufen.
Ich würde gerne eine Abfrage einbauen, ob der Server mind. 4 Stunden "UP"
ist bevor das Skript läuft, weil ich mir sonst die Tests, die das Skript
macht, sparen kann.
Wäre es nicht das einfachste ein Flag ab zu fragen, das erst vier Stunden
nach dem booten gesetzt wird?

So wie

rm irgendwas
( sleep 4h ; touch irgendwas ) &

in rc.local und das o.g Script mit

test ! -e irgendwas && exit 0

zu beginnen?

HTH

Orgel
--
I have seen things you lusers would not believe. I've seen Sun
monitors on fire off the side of the multimedia lab. I've seen
NTU lights glitter in the dark near the Mail Gate. All these
things will be lost in time, like the root partition last week.
Daniel Fischer
2004-09-17 18:42:10 UTC
Permalink
Post by Bernd Kuhlen
Aufgrund der vielen unterschiedlichen Formate von uptime (z.B. up 15:49,
up 22 days) ist das aber keine triviale Aufgabe. Die manpage von uptime
ist leider sehr überschaubar. Optimal wäre eine Rückgabe der online-Zeit
in Sekunden.
Lass doch beim Booten ein File irgendwo touchen. Dann hast Du ziemlich
kompatibel ueberall die letzte Bootzeit (nur das wie man den Rechner dazu
bringt, das beim Booten zu tun, das ist natuerlich anders ;)

Eventuell haben alle Deine Systeme ja alle sowas sowieso schon, die mtab auf
welchen wo nur beim Booten gemounted wird oder was in der Art.



Daniel
Juergen P. Meier
2004-09-20 05:52:38 UTC
Permalink
Post by Daniel Fischer
Post by Bernd Kuhlen
Aufgrund der vielen unterschiedlichen Formate von uptime (z.B. up 15:49,
up 22 days) ist das aber keine triviale Aufgabe. Die manpage von uptime
ist leider sehr überschaubar. Optimal wäre eine Rückgabe der online-Zeit
in Sekunden.
Lass doch beim Booten ein File irgendwo touchen. Dann hast Du ziemlich
kompatibel ueberall die letzte Bootzeit (nur das wie man den Rechner dazu
bringt, das beim Booten zu tun, das ist natuerlich anders ;)
Eventuell haben alle Deine Systeme ja alle sowas sowieso schon, die mtab auf
welchen wo nur beim Booten gemounted wird oder was in der Art.
Wie waere es mit einem "at now +4 hours" Job, gestartet beim Booten,
der den Zustand "4h nach Boot" z.B. in /var/run/ markiert?
(Nach dem Start von cron natuerlich ;)

Juergen
--
Juergen P. Meier - "This World is about to be Destroyed!"
Daniel Fischer
2004-09-20 06:55:04 UTC
Permalink
Post by Juergen P. Meier
Wie waere es mit einem "at now +4 hours" Job, gestartet beim Booten,
der den Zustand "4h nach Boot" z.B. in /var/run/ markiert?
(Nach dem Start von cron natuerlich ;)
Ach, da faellt mir noch was ein, mit vixie cron geht auch

@reboot sleep 14400; ...hier kommt die Magie...



Daniel

Heiko Kuerschner
2004-09-17 19:33:48 UTC
Permalink
Post by Bernd Kuhlen
Aufgrund der vielen unterschiedlichen Formate von uptime (z.B. up
15:49, up 22 days) ist das aber keine triviale Aufgabe. Die manpage
von uptime ist leider sehr überschaubar. Optimal wäre eine Rückgabe
der online-Zeit in Sekunden.
Eine Möglichkeit wäre noch, das Alter der boot-Message abzufragen.
Allerdings weiß ich nicht, in wie weit die Namen dafür auf den Systemen
differieren.
--
Kürsche
Wenn's 'ner net gwittern tun tut ;)
______________________________________________________________________
Linux/*BSD-Anleitungen, Forum und Chat: www.newbie-net.de
HTML per Script validieren: www.unneraans.de/html-validator.sh/
Tassilo Horn
2004-09-17 20:07:19 UTC
Permalink
Post by Bernd Kuhlen
Hallo NG,
Hallo,
Post by Bernd Kuhlen
[ Rechner an, 4 Stunden warten, dann alle 15 Minuten Skript
ausführen ]
Bin für Hinweise und Ideen sehr dankbar.
Also wenn du *fcron* [1] als cron-Dämon nutzen könntest, so würdest du
einfach folgendes in deine fcrontab schreiben:

,----
| @first(4h) 15 /path/to/script.sh
`----

fcron unterstützt auch die althergebrachte crontab-Syntax, so dass du
deine Cronjobs 1 zu 1 übertragen könntest.

HTH,
Tassilo

[1] http://fcron.free.fr/
--
"Beware of bugs in the above code; I have only proved it correct, not
tried it." (Donald Knuth)
Helmut Hullen
2004-09-18 05:54:00 UTC
Permalink
Hallo, Bernd,
Ich habe ein Script, das die Aktualität von diversen Server-Dateien
testet. Nun ist es so, daß ein Server, der offline war eine gewisse
Zeit braucht, bis alle Dateien up to date sind.
Mein Testskript läuft alle 15 min im crontab und sollte nicht 15
Minuten nach der "Wiederauferstehung" des Servers X laufen.
Ich würde gerne eine Abfrage einbauen, ob der Server mind. 4
Stunden "UP" ist bevor das Skript läuft, weil ich mir sonst die
Tests, die das Skript macht, sparen kann.
Unter Linux würde das mit "anacron" gehen (u.a. bei RedHat).

Eintrag in "/etc/anacrontab"

1 240 testskript <Pfad>/testskript
^wartet nach dem Start 240 Minuten
^letzter Durchlauf ist mind. 1 Tag her

Oder brauchst Du den Mechanismus auch mehrmals täglich?

Viele Grüße!
Helmut
Lesen Sie weiter auf narkive:
Loading...