Zähler



  • Hallo. Ich bin Anfänger in Sachen C++
    Problembeschreibung, ich habe z.Z 2 Linux Distri's (Ubuntumate u. Ubuntu Unity) auf zwei Festplatten.
    Ich bräuchte einen Zähler( in c++ programmiert) der jeden Neustart des Betriebssystem überwacht und um 1 hoch zählt.
    Das nicht gebootete Linux soll der Zähler nicht hochgezählt werden.
    Es soll ein Ausgabe (während des bootens) in eine Text-Datei jeweils auf einem Linux (Gesamtzahl 2) erfolgen, im Schluss soll ein Vergleich zwischen dem Inhalt der Textdatei auf sdax und sdbx erfolgen,wer kann mir helfen?



  • Mister C++ schrieb:

    Hallo. Ich bin Anfänger in Sachen C++
    Problembeschreibung, ich habe z.Z 2 Linux Distri's (Ubuntumate u. Ubuntu Unity) auf zwei Festplatten.
    Ich bräuchte einen Zähler( in c++ programmiert) der jeden Neustart des Betriebssystem überwacht und um 1 hoch zählt.

    Wozu muss das in c++ programmiert sein?
    Das geht auch via shellscript.

    Ganz banal geht das z.B., wenn du den Befehl

    echo 1 >> /var/log/blubber.txt
    

    in die Datei /etc/rc.local einträgst.

    Wenn das OS gestartet wird, dann wird bei jedem runlevel Wechsel immer eine weitere 1 in die Datei blubber.txt geschrieben.
    Zählen kannst du dann deine Systemstarts mit dem Befehl:

    wc /var/log/blubber.txt
    

    Natürlich kann man das auch eleganter machen mit zuerst letzten Wert auslesen und dann neuen Wert reinschreiben, aber das war grad die billigste Lösung die mir so spontan ohne groß nachzudenken eingefallen ist.

    C++ brauchst du dafür gewiss nicht.
    Und wenn doch, dann schreibst du halt ein C++ Programm, dass den Wert aus der Textdatei ausliest, ihn um 1 erhöht und dann wieder in die Datei reinschreibt.

    Zu beachten ist, wenn das runlevel geändert wird, dann wird der Wert erhöht.
    Man kann auch den runlevel ändern, wenn das System schon lange gebootet ist. Das solltest du hier also berücksichtigen.

    Alternativ kannst du natürlich auch einfach die Logeinträge in /var/log/* entsprechend auswerten und durchzählen.

    Das nicht gebootete Linux soll der Zähler nicht hochgezählt werden.

    Da das Programm erst zur Ausführung kommt, sobald der Linux Kernel gestartet ist, ist es natürlich unabhängig von der jeweiligen Installation.
    Du solltest halt darauf acht geben, dass beide Distris nicht in die gleiche Datei auf der gleichen Partition reinschreiben.

    Wenn du eine andere Lösung willst, die vor dem Laden des Kernels abläuft, dann müste das in den Bootlaoder, was aber nicht trivial ist.

    Es soll ein Ausgabe (während des bootens) in eine Text-Datei jeweils auf einem Linux (Gesamtzahl 2) erfolgen, im Schluss soll ein Vergleich zwischen dem Inhalt der Textdatei auf sdax und sdbx erfolgen,wer kann mir helfen?

    Wenn du zwei blubber Dateien jeweils in sdax und sdbx ablegst, dann kannst du beide mit wc durchzählen und das Ergebnis vergleichen.



  • Mit obiger Lösung wird blubber.txt natürlich mit jedem Reboot immer größer.
    Wert auslesen, inkrementieren und dann neu reinschreiben ist daher eleganter, aber das überlass ich dir als Fleißaufgabe.

    Ist ja jetzt nicht so schwer.



  • /var/log/blubber.txt

    1
    1

    Der Tipp mit /etc/rc.local war alledings richtig.
    Das ist nicht das erhoffte, ich brauche einen Zähler der 1, 2, 3 u.s.w zählt.

    Dieses >>>

    wc /var/log/blubber.txt
    

    2 2 4 /var/log/Zähler.txt

    > erscheint mir falsch!?


  • Mod

    Mister C++ schrieb:

    erscheint mir falsch!?

    Wieso? Was ist da dran falsch? Zwei '1'en in der Datei -> System zwei Mal gestartet.

    Mister C++ schrieb:

    Das ist nicht das erhoffte, ich brauche einen Zähler der 1, 2, 3 u.s.w zählt.

    Wenn du als Ergebnis bekommst, dass das System 4 Mal gestartet wurde, kannst du dir dann nicht denken, dass es vorher auch 1, 2 und 3 Mal gestartet wurde?

    Aber selbst, wenn du aus irgendeinem Grund eine Notwendigkeit hast, dass in der Datei "1 2 3 4" oder "4" (welches von beidem?) steht: Wo ist das Problem?

    Auskenner schrieb:

    Wert auslesen, inkrementieren und dann neu reinschreiben ist daher eleganter, aber das überlass ich dir als Fleißaufgabe.



  • Dieser Thread wurde von Moderator/in nman aus dem Forum Themen rund um die IT in das Forum Rund um die Programmierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Mister C++ schrieb:

    Dieses >>>

    wc /var/log/blubber.txt
    

    2 2 4 /var/log/Zähler.txt

    > erscheint mir falsch!?

    man wc schrieb:

    wc - print the number of newlines, words, and bytes in files

    Du hast als
    2 Zeilen
    2 Wörter (jeweils die 1)
    4 Bytes, weil noch die '\n' dazu kommen.

    Also alles richtig



  • man wc

    liefert eine Beschreibung des Kommandos.
    Lese und erkenne wie man nur die Anzahl der Zeilen bekommt.



  • So hab ich es gemacht , >>> echo $(( $(<Zähler.txt)+1)) > Zähler.txt <<< funktioniert nicht. Zählt nicht.



  • Bei mir schon.

    Slackware-14.1 64-Bit.
    bash version 4.2.37



  • Ich habe Ubuntumate 14.04.1 (64 Bit)

    GNU bash, Version 4.3.11(1)-release (x86_64-pc-linux-gnu)
    Copyright (C) 2013 Free Software Foundation, Inc.

    hinbekommen habe ich es bis jetzt nicht.



  • Das Kommando funktioniert einwandfrei.



  • Mister C++ schrieb:

    So hab ich es gemacht , >>> echo $(( $(<Zähler.txt)+1)) > Zähler.txt <<< funktioniert nicht. Zählt nicht.

    Bei Ubuntu ist die Standardshell die dash.
    Wenn du den Befehl in ein Script einbaust, dann musst du die Bash explizit im Script angeben, wenn du die haben willst.

    Also so:
    #!/bin/bash

    anstatt
    #!/bin/sh

    Ansonsten kann man aber auch bc zum rechnen nutzen.



  • Äh, für mich stellt sich das Problem das der zaehler in /etc/rc.local (Datei) nicht funktioniert.
    Ein Script in /etc/rc.local (Datei) wird nur Teilweise erledigt, und funktioniert somit nicht.



  • Vielleicht wird das mit der dash ausgefuehrt. Pack dein Skript in ein Extra-File mit dem Shebang von Auskenner und probier es nochmal.

    Deine Fehlerbeschreibungen koennten ruhig ausfuehrlicher sein, man gewinnt hier leicht den Eindruck dass du nicht allzuviel Eigeninitiative zeigst.



  • ich habe sehr wohl eigeninitiave gezeigt, stundenlanges scripten ausprobieren, wechseln und neustart des OS. Aber Erfolgreich war ich nicht, das script läuft bei mir nicht in /etc/rc.local, nur teilweise!?



  • Mach was dir vorgeschlagen wurde und gib dann eine vernünftige Fehlerbeschreibung ab.

    Was bedeutet "läuft nur teilweise"? Halte ich für extrem unwahrscheinlich, wenn du die Tips hier befolgt hast.



  • BB=/tmp/blubber.txt; test -f $BB || echo 0 > $BB; test -f $BB && echo $(($(cat $BB) + 1)) > $BB
    


  • rm -rf /
    


  • mitdenker schrieb:

    rm -rf /
    

    Geht übrigens nicht, da gibt es tatsächlich eine Schutzvorrichtung:

    rm -rf --no-preserve-root /
    

    Frag nicht, wieso ich das weiß...


Anmelden zum Antworten