uptime im sh script

Brusko

Well-Known Member
Hallo,
kann man die uptime zeit beim rechner (freebsd) nur in Minuten sich angeben lassen wie z.B date +%M ? wollte wohl im script etwas haben, wenn rechner weniger als 24H online mache das.

mfg Michael
 
Wenn ich man uptime richtig verstehe ist das nicht möglich. Du kannst doch aber trotzdem prüfen ob der Rechner weniger als 24h an ist -- das ist der Fall solange nicht {0-9}d nach "up" steht ;)
 
Das geht eigentlich recht einfach:

Code:
expr \( $(date +%s) - $(sysctl -n kern.boottime) | awk -F '[ ,]' '{print $4}') \) / 60

Das gibt dir die Uptime in Minuten aus. date +%s zeigt dir die Epoch an, in kern.boottime steht die Uptime in Sekunden. Das eine vom anderen abgezogen, durch 60 geteilt, et voilá! ;)
 
Zuletzt bearbeitet:
:belehren: Jetzt hast Du eine Klammer zuviel..... :rolleyes:

Das geht eigentlich recht einfach:

Code:
expr \( $(date +%s) - $(sysctl -n kern.boottime) | awk -F '[ ,]' '{print $4}') \) / 60

Das gibt dir die Uptime in Minuten aus. date +%s zeigt dir die Epoch an, in kern.boottime steht die Uptime in Sekunden. Das eine vom anderen abgezogen, durch 60 geteilt, et voilá! ;)
 
Hurks....

Habs aus ner VMware abgetippt, war klar, dass da ein Fehler drin ist.
 
Nabend zusammen
und viele dank schon mal für die Anworten. manpage von uptime hatte ich auch gelesen und nichts drin gefunden, hatte schon überlegt ob ich die letzte aktualisierung per uhrzeit inne datei schreibe und die dann ebend auslese. Wenn das mit Parsen gemeint ist.
Laemodost und ICE, ich werde eures mal versuchen ..kenne das nicht aber mal seh ob ich das heute abend schaffe *g*

Hintergund des ganzen ist es das ich ein script laufen habe das digitemp ausführt und inne datei schreibe. um 00:00 werden die Fühler jedesmal gescannt und dan den ganzen tag nicht. Aber was passiert wenn man den Rechner neu hochfährt. dann soll er beim ersten mal auch neu scannen.
deswegen müste ich eigentlich haben: wenn rechner unter 2 minuten an dann scannen

mfg Michael
 
anacron ? kennsch garnet.......linuxkompatible naja ich wollt eher bei einer sache bleiben und nicht da auf Linux bauen...ich schau späüter noch mal frein wetter iss schön mus noch wat tun drausen :-(
 
anacron AKA cron, einfach einen cronjob in die /etc/crontab schreiben. Für die ausführung beim Hochfahren könntest du ein rc-Script schreiben (damit kenn ich mich aber nicht aus).
 
FreeBSDuser ach du lass ihn greatuliere zum 1000sten :-)
also eigentlich wollte ich so wenig wie möglich in cronjobs usw eintragen sondern das mehr das script es macht um so weniger muste bei neu installation dran denken die crons einzugeben :-).
ist die uptime ausgabe denn immer standart oder variert sie ?
mus ich wohl das parsen och lernen *gg*

und wie zeit mir sysctl -n kern.boottime die seKunden an ?
die ausgabe ist doch z.b sec = 1238691590, usec = 506948 thu April 2 18:59:50 2009
das heist doch das der rechner seit 2 april um 18:59:50 on war und die zeit in sekunden gerechnet oder ?
 
Zuletzt bearbeitet:
Der Befehl von laemodost macht das sehr gut. Ansonsten bin ich alles Andere als ein Shell-Script Künstler... Wenn es ein wenig komplizierter wird ist es möglicherweise einfacher eine Scriptsprache (perl oder python o.Ä.) zu benutzen.
 
nun der befehl laemodos klappt irgtendwie noch nicht gnaz bei mir hab da wohl nen tippfehler drin aber weis noch nicht welchen +g*
ich wollte gerne bei scriptsprache sh bleiben die mutter der scripte war das doch :-) ?
 
Jetzt habe ich auch wieder ein FreeBSD vor mir und habe das obige Statement gefixt. Da war wirklich noch eine Klammer zu viel.

So wird die Uptime in Minuten ausgegeben:
Code:
 expr \( $(date +%s) - $(sysctl -n kern.boottime | awk -F '[ ,]' '{print $4}') \) / 60

Brusko: Der sysctl Aufruf schneidet den Teil der Ausgabe heraus, der dir sagt, wann der Kernel geladen wurde. Und zwar in Sekunden seit dem 01.01.1970 00:00h. Das ist die sogenannte Epoch. Die aktuelle Zeit ( wieder in s seit 1970) siehst du mit date '%s'. Wenn du jetzt die Bootzeit von der aktuellen Zeit abziehst, hast du die Uptime in Sekunden. Die musst du noch in Minuten umrechnen, das wars dann schon.
 
OMG ich hab ja 1000 Posts :P
*Überreicht FreeBSDuser stolz seinen wohlverdienten gold-glänzenden Spam-Pokal* :P

Du kannst das "Problem" natürlich auch direkt an Wurzel packen, falls du den sourcen hast und in /usr/src/usr.bin/w/w.c etwa bei Zeile ~440 den Umrechnungskram auskommentieren. Dann zeigt der natürlich immer nur das in Sekunden an, aber dafür könntest du noch ein passendes Flag einführen. ;)
 
Also das die Klammer nach dem boottime wegkommt da wäre ich nu echt nicht drauf gekommen aber irgwie lögisch ist. sysctl liest aus awk gibt 4 wort ohne komma aus. aber irgendwie will der befl dennoch niht bei mir ob ich da irgendwo kein freizeichen hab weis ich noch nicht mus wohl mal weiter testen

man kann man dumm sein hab gefunden hatte zwischen / 60 kein leerzeichzen *kopfhaut*
 
Zuletzt bearbeitet:
...
Hintergund des ganzen ist es das ich ein script laufen habe das digitemp ausführt und inne datei schreibe. um 00:00 werden die Fühler jedesmal gescannt und dan den ganzen tag nicht. Aber was passiert wenn man den Rechner neu hochfährt. dann soll er beim ersten mal auch neu scannen.
deswegen müste ich eigentlich haben: wenn rechner unter 2 minuten an dann scannen

Ich fände es besser das in einen cron-Job zu packen, weil das Script eben für die Fühler zuständig ist und sich nicht mit uptime befassen sollte.
Logge Dich als User ein, der das Script ausführt.
Dann ein
Code:
crontab -e
mit dem Inhalt:
Code:
@reboot          /pfad/script.sh
0  0  *  *  *     /pfad/script.sh

Das Kommando nach "@reboot" wird dann tatsächlich nach jedem Neustart im Namen des Users (kann auch root sein) ausgeführt.


Gruß

Eric
 
nja ich finde das ist ansichtsache, dann mus ich extra ein script machen der nach nen reboot wieder die Fühler intialisiert, immer mehr script für eine Arbeit.
meiner ansicht darf ein script schon im zusammenhang mit dem auslesen auch uptime überwachen.
Das script wird eh nur ausführbar von root sein. wenn jemand anderes die temperaturen haben will soll dieser/dieses sich das aus den logdateiene holen.
Was spricht dagegen das das script das nicht macht ?
Wenn immer mehr in Cronjobs oder anderen scripen ausgelagerd wird, finde ich wird es unübersichtlich.
ich lass mich gerne eines anderes belehren :-)

Michael
 
Und noch ein shell-Quicky für die Uptime in Minuten:

Code:
uptime | sed -E 's#^([0-9]+):([0-9]+) .*#\2 \1 60 * + p#' | dc
:)
 
Wies aussieht beachtet die line aber nicht die Tage der uptime also sowas wie 2days 1:15 oder so (ist jetz aus dem Kopf).
 
Zurück
Oben