beim Einstecken von USB Stick, Daten automatisch aktualisieren funktioniert nicht

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo,

    ich habe nach den diversen udev Beiträgen von meigrafd meinen Raspi A+, der ein paar Temperatursensoren abfragen soll, konfiguriert.
    Also
    1. udev Regel erzeugt
    2. /bin/usbmount.sh erzeugt


    3. die doDump.sh soll aus der RoundRobin Database einen Dump auf den eingesteckten USB schreiben.

    Das funktioniert leider nur händisch (./doDump.sh als user pi), beim automatischen Ablauf bleibt der Schreibprozess bei 44MB hängen (für Tage), obwohl die Datei 50MB hat.
    Ich habe diverse USB-Sticks probiert, ich weiss jetzt echt nicht, was der Unterschied zwischen dem direkten Aufruf und dem automatischen Ablauf sein könnte.
    Es werden auch keine Fehler angezeigt.

    Gibt es da noch irgendeinen Fallstrick? Oder eine Methode, wie man es besser machen könnte?

    doDump.sh:


    Gruß
    Christoph

  • beim Einstecken von USB Stick, Daten automatisch aktualisieren funktioniert nicht? Schau mal ob du hier fündig wirst!

  • Es könnte sein (Vermutung!) das ein Befehl über udev nur eine gewisse Zeitlang ausgeführt werden darf aber dein Script zu lange braucht bis es sich beendet. Evtl. denkt udev also der RUN Befehl hätte sich aufgehangen und beendet diesen dann...
    Eine Lösung hierfür könnte sein das Script in den Hintergrund zu schicken, also die Rule anpassen:

    Code
    ACTION=="add", KERNEL=="sd?1", SUBSYSTEMS=="usb", ATTRS{serial}=="G5L061KQ66TM7K9I99J7", RUN+="(/bin/bash /bin/usbmount.sh &) >/dev/null"
  • Es könnte sein (Vermutung!) das ein Befehl über udev nur eine gewisse Zeitlang ausgeführt werden darf aber dein Script zu lange braucht bis es sich beendet.

    Genau das ist das Problem.... siehe ManPage udev:

    Zitat

    PROGRAM
    Execute a program to determine whether there is a match; the key is
    true if the program returns successfully. The device properties are
    made available to the executed program in the environment. The
    program's standard ouput is available in the RESULT key.

    This can only be used for very short-running foreground tasks. For
    details, see RUN.

    Das bedeutet, es hilft auch nix, das Programm als ganzes in den Background zu schieben, wichtig ist, dass das Programm binnen kurzer Zeit mit exit 0 zurückkehrt. Was vermutlich funktionieren würde, wäre ein solches Konstrukt:

    Wobei ich es als bessere Alternative erachte, eine instanziierte mount-unit via systemd zu starten. Aber via Script müsste eigentlich auch gehen.

  • Zitat


    Wobei ich es als bessere Alternative erachte, eine instanziierte mount-unit via systemd zu starten. Aber via Script müsste eigentlich auch gehen.

    Danke für die Hilfe, aber das Skript schaut sehr kompliziert aus, da müsste ich erst mal wieder das Bash-Hilfe-Buch lesen, um das zu kapieren...


    Ich habe mittlerweile mehrere Sachen ausprobiert und viel gelesen: der beste Vorschlag ist wohl, einen oneshot-Service zu starten.


    Müsste so aussehen:

    Code
    [Unit]
    Description=dump large rrd-temperature to usb
    
    
    [Service]
    Type=oneshot
    ExecStart=/home/pi/doDump.sh

    Die Udev-Regel startet /bin/usbmount.sh wie gehabt (das mounten dauert wohl nicht zu lange), darin dann der Start des Service.
    Funktioniert soweit.

    Danke für die Hilfe.

    Gruss
    Christoph

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!