Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 14 von 14
  1. #11
    Pike_Bishop
    Gast
    Hi,

    Also gut hab nun nen ersten Entwurf;

    Zunächst mal muss man in der /etc/mdev.conf folgende Zeile eintragen;
    Code:
    $SUBSYSTEM=usb    root:root 664 @/usr/script/start_usbstick_script.sh
    die /etc/mdev.conf sollte dann insgesamt so aussehen;
    Code:
    console 0:0 0600 
    cpu_dma_latency 0:0 0660 
    fb([0-2]) 0:0 0660 >fb/%1
    i2c-([0-9]) 0:0 0660 >i2c/%1
    mtd([0-9]) 0:0 0660 >mtd/%1
    mtdblock([0-9]) 0:0 0660 >mtdblock/%1
    full 0:0 0666 
    initctl 0:0 0600 
    ircomm[0-9].* 0:20 0660 
    kmem 0:15 0640 
    kmsg 0:0 0660 
    log 0:0 0666 
    loop[0-9].* 0:6 0640 
    mem 0:15 0640 
    network_latency 0:0 0660 
    network_throughput 0:0 0660 
    null 0:0 0666 
    port 0:15 0640 
    ptmx 0:5 0666 
    ram[0-9].* 0:6 0640 
    random 0:0 0666 
    tty 0:5 0666 
    tty.* 0:0 0620 
    urandom 0:0 0666 
    usbdev.* 0:0 0660 
    vcs.* 0:5 0660 
    zero 0:0 0666
    tun[0-9]* 0:0 0640 =net/
    
    pcm.* 0:0 0660 =snd/ 
    control.* 0:0 0660 =snd/ 
    timer 0:0 0660 =snd/ 
    
    event.* 0:0 0660 =input/
    mice 0:0 0660 =input/
    mouse.* 0:0 0660 =input/
    
    rtc0 0:0 0666 =misc/rtc
    
    [hs]d[a-z][0-9]? 0:0    664     */etc/mdev/mdev-mount.sh
    mmcblk[0-9]p[0-9] 0:0   664     */etc/mdev/mdev-mount.sh
    $SUBSYSTEM=usb    root:root 664 @/usr/script/start_usbstick_script.sh
    sr[0-9]          0:0    664     @/usr/bin/bdpoll $MDEV -c
    
    dvb([0-9])\.(.*)([0-9]) 0:0     660     >dvb/adapter%1/%2%3
    
    lcd0            0:0     660     =dbox/lcd0
    oled0           0:0     660     =dbox/oled0
    dboxlcd         0:0     660     =dbox/lcd0
    pvr             0:0     660     =misc/pvr
    vtuner([0-9])   0:0     660     =misc/
    fp0             0:0     660     =dbox/fp0
    
    $MODALIAS=.*    0:0     660 @modprobe "$MODALIAS"

    Sollte es noch keinen Ordner /usr/script an der Box geben dann erstellt man den entweder gleich mit Filezilla (FTP Programm) oder per telnet Befehl wie folgt;
    Code:
    mkdir /usr/script

    Nun kommt folgendes Script unterm Namen start_usbstick_script.sh auf der Box nach /usr/script;
    Code:
    #!/bin/bash
    
    ## Variablen ##
    BLKID_PACKAGE=util-linux-blkid
    BLKID=/sbin/blkid.util-linux
    SCRIPTDIR=/usr/script
    USBSTICK_UUID="762C-2339"
    USBSTICK_SCRIPT=usbstick_script.sh
    TMP=/tmp
    LOGFILE=$TMP/start_usbstick_script.log
    
    
    # Altes Logfile loeschen
    rm -f $LOGFILE
    
    
    # Generelles Logging
    exec 3>&1 4>&2
    trap 'exec 2>&4 1>&3' 0 1 2 3
    exec 1>$LOGFILE 2>&1
    
    
    # Nur falls noch nicht installiert, blkid nachinstallieren.
    if [ ! -f $BLKID ] ; then
        echo -e "\nInstalliere Paket $BLKID_PACKAGE ...\n" 
        opkg update
        opkg install $BLKID_PACKAGE
        
        if [ "$?" = "0" ] ; then
            echo -e "\nInstallation Paket $BLKID_PACKAGE erfolgreich beendet.\n"
        else
            echo -e "\n! ABBRUCH !\nInstallation Paket $BLKID_PACKAGE fehlgeschlagen."
            echo "Eventuell falls die Paketmanagement Aktualisierung zuvor fehlschlug."
            echo -e "Bitte Paket $BLKID_PACKAGE manuell installieren,\nund das Script erneut starten.\n\n"
            exit 1
        fi
    fi
    
    
    USBSTICK_DEV="$(blkid -U $USBSTICK_UUID)"
    sleep 2
    USBSTICK_MOUNT="$(mount | grep $USBSTICK_DEV | awk {'print $3'})"
    sleep 3
    echo -e "\nUSB-Stick Device = $USBSTICK_DEV"
    echo -e "USB-Stick Mountpoint = $USBSTICK_MOUNT\n"
    
    
    if [ -e $USBSTICK_MOUNT/$USBSTICK_SCRIPT ] ; then
        echo -e "\n$USBSTICK_SCRIPT in $USBSTICK_MOUNT gefunden."
        echo -e "\nKopiere $USBSTICK_SCRIPT nach $SCRIPTDIR ...\n"
        cp -f $USBSTICK_MOUNT/$USBSTICK_SCRIPT $SCRIPTDIR
        
            if [ "$?" = "0" ] ; then
                echo -e "$USBSTICK_SCRIPT kopieren erfolgreich beendet.\n"
            else
                echo -e "\n! ABBRUCH !\n$USBSTICK_SCRIPT kopieren fehlgeschlagen.\n\n"
            fi
            
        chmod 755 $SCRIPTDIR/$USBSTICK_SCRIPT
        bash $SCRIPTDIR/$USBSTICK_SCRIPT
    else
        echo -e "\n! ABBRUCH !\nKein $USBSTICK_SCRIPT in $USBSTICK_MOUNT gefunden.\n\n"
        exit 1
    fi
    
    
    exit

    HINWEIS ! Wie wird aus dem Code oben ein Script - ganz einfach man kopiert den Code hier raus und fügt ihn so wie er da steht
    mittels eines Linux Editors wie z.b: Notepad++ in ein Textfile ein wobei es erstmal egal ist wie das Textfile benannt ist, aber man muss es dann
    schon zum Schluss noch umbennen um beim Beispiel oben zu bleiben in start_usbstick_script.sh

    GANZ WICHTIG NOCH ! - Im Script oben muss die Variable in Zeile 7 auf die eigenen Gegebenheiten angepasst werden also diese Zeile;
    Code:
    USBSTICK_UUID="762C-2339"
    und zwar muss der Zahlencode auf den eigenen USB-Stick angepasst werden, man bekommt den Zahlencode (uuid) durch den Befehl blkid
    in telnet heraus (bei angestecktem USB-Stick versteht sich).


    Liegt dieses Script dann auf der Box unter /usr/script muss es noch mit folgenem telnet Befehl ausführbar gemacht werden;
    Code:
    chmod 755 /usr/script/start_usbstick_script.sh

    Nun braucht es nur noch das Hauptscript welches auf den USB-Stick kopiert werden muss, es muss die Bezeichnung usbstick_script.sh haben und sieht so aus;
    Code:
    #!/bin/bash
    
    ## Variablen ##
    BOXIP=http://localhost
    WGET=/usr/bin/wget
    MESSAGES="*type=*"
    
    
    cd /tmp
    rm -f $MESSAGES
    
    
    STARTDATE="$(date +%a.%d.%b.%Y-%H:%M)" && echo -e "\n\nJOB START -> $STARTDATE\n\n" && sleep 7
    $WGET "$BOXIP/web/message?text=This%20is%20a%20test%20->%20$STARTDATE&type=1&timeout=10" && sleep 5
    
    exit
    Das Hauptscript sollte man ebenfalls gleich ausführbar machen dazu am Besten den USB-Stick an der Box anstecken und per Filezilla nachsehen wohin der gemountet ist
    , dann dorthin navigieren mit Filezilla , das Script rechts anklicken, auf Dateiberechtigungen gehen und da als numerischen Wert 755 eintragen.
    Jetzt sollte man den USB-Stick erstmal manuell umounten - das geht in telnet mit dem Befehl;
    Code:
    umount /dev/sde1
    wobei natürlich sde1 mit Eurem device ersetzt werden muss das kann ja durchaus sda1 oder sdb1 oder sonstwas sein.
    Man sollte das aber leicht mit dem Befehl;
    Code:
    mount
    in telnet herausfinden können).

    Danach den USB-Stick abziehen und nun braucht man die Box nur noch komplett neuzustarten.
    Nach Hochfahren der Box USB-Stick mit Script drauf einstecken und gucken, dauert ein paar Sekunden.



    Zusätzliche Infos!

    Gut also erstmal was zum Ablauf,
    Das erste Script also das oberste mit Namen start_usbstick_script.sh ist quasi nur ein Starterscript welches immer auf der Box bleiben muss
    weil es eben anders nicht geht um ein Script am USB-Stick anzuwerfen wenn der eingesteckt wird.
    Es wird miitels mdev bei einstecken des USB-Sticks angeworfen und führt dann das Hauptscript aus welches in diesem Beispiel erstmal nicht viel tut
    ausser eine Message am TV auszugeben nämlich sowas in etwa;

    -screenshot_2017-04-18_22-42-31.jpg

    Ich hatte zuerst Timing Probleme hab aber dann an zwei Stellen jeweils nen sleep eingebaut und die dürften nun behoben sein, jedenfalls
    hab ich es mittlerweile 4x getestet und es funktionierte jedesmal korrekt.
    Also nicht wundern das Script schiesst nicht gleich los, es dauert ein paar Sekunden.
    Wer also will kann es probieren bei sich, es kann gar nix passieren.

    Im Moment mach ich es so das das erste Script erstmal das Hauptscript auf die Box kopiert ebenfalls nach /usr/script und es erst dann ausführt.
    Da brauchts noch Tests ob das eventuell gar nicht nötig ist und es gleich vom USB-Stick aus ausgeführt werden kann.


    Das entscheidende bei der ganzen Sache ist das Hauptscript also das Script welches am USB-Stick zu liegen hat welches ja jetzt kaum was tut (vor Allem nix sinnvolles).
    Mit diesem kann man alles mögliche nun anstellen wie z.b: Dateien auf ihren Platz kopieren oder was auch immer (je nachdem halt was man möchte/braucht).
    Nur muss man sich dieses Script halt zusammenschreiben bzw. umschreiben nach seinem persönlichen Bedarf.
    Es ging ja nur darum erstmal ne Möglichkeit zu finden wennn man nen USB-Stick einsteckt damit ein Script automatisch abgearbeitet wird und das klappt ja nun schonmal.

    Jedoch sollte klar sein wenn man das Hauptscript auf USB-Stick z.b: verwenden möchte um Dateien von demselben USB-Stick auf die Box an ihre Plätze zu kopieren
    muss man auch dafür sorgen das in diesem Script erstmal ausgelesen wird wie der Pfad zu den Dateien lautet was ja davon abhängt wohin der USB-Stick gemountet wurde beim Einstecken.
    Das kann man sich aber eh schon im ersten Script mit Namen start_usbstick_script.sh abgucken es sind diese Teile davon;
    Code:
    USBSTICK_UUID="762C-2339"
    
    USBSTICK_DEV="$(blkid -U $USBSTICK_UUID)"
    sleep 2
    USBSTICK_MOUNT="$(mount | grep $USBSTICK_DEV | awk {'print $3'})"
    sleep 3
    So bekommt man das dann also schon raus, und das ist auch noch aus einem anderen Grund wichtig, nämlich grade dann wenn man sowas für unversierte Verwandte einrichtet
    sollte man im Script mit Namen usbstick_script.sh also das welches am USB-Stick liegt dafür sorgen das es nach Abarbeitung den USB-Stick gleich auch umountet
    denn sonst gehen die Verwandten her und ziehen den USB-Stick ab ohne den zuvor zu umounten was ja mal dazu führen kann das Datenverlust am USB-Stick entsteht.


    Und noch etwas abschliessend - wenn sich jetzt jemand ein Script am USB-Stick dahingehend schreibt das es das Image aktualisiert also ihr wisst schon
    opkg update
    opkg upgrade

    einbaut dann könnte es mal sein das die /etc/mdev.conf mit einer neueren aus dem git aktualisiert wird und die Zeile die man da
    eingetragen hat wie ganz oben zu sehen also diese;
    Code:
    $SUBSYSTEM=usb    root:root 664 @/usr/script/start_usbstick_script.sh
    is wieder futsch.
    Bei sowas also ab und zu nachsehen ob die betreffende Zeile noch in der /etc/mdev.conf drinnen steht und wenn nicht wieder eintragen
    sonst haut das Ganze ja nicht mehr hin.
    Aber wie gesagt das is nur wenn man das Image mal updatet egal ob mittels Script oder der Image eigenen Update Routine.
    Und bei nem Neuflash aber das is ja eh klar.


    Ach so ja hätt ich fast vergessen, hab ein bisschen Logging auch eingebaut - Logfile findet man unter /tmp nennt sich start_usbstick_script.log
    Logfile sieht hier so aus bei Erfolg;
    Code:
    USB-Stick Device = /dev/sde1
    USB-Stick Mountpoint = /media/sde1
    
    
    usbstick_script.sh in /media/sde1 gefunden.
    
    Kopiere usbstick_script.sh nach /usr/script ...
    
    usbstick_script.sh kopieren erfolgreich beendet.
    
    
    
    JOB START -> Tue.18.Apr.2017-22:42
    
    
    Connecting to localhost (127.0.0.1:80)
    
    message?text=This%20 100% |*******************************|   168   0:00:00 ETA
    Wer also will kann das nun mal antesten - werd bestimmt noch das ein oder andere verbessern.


    Grüsse
    Pike
    Geändert von Pike_Bishop (18.04.2017 um 23:59 Uhr)

  2. Thanks sgs bedankten sich
    •   Alt Advertising

       

  3. #12
    Pike_Bishop
    Gast
    Hi,

    Ok, ich hab einiges geändert und hab das auch ein paar Mal getestet (hat immer funktioniert) deshalb schreib ich hier alles neu zusammen wie folgt.
    Die beiden Scripts mit Namen start_usbstick_script.sh und usbstick_script.sh häng ich unten im Paket new_scripts.zip zum downloaden an, so
    das man die nicht mehr aus dem Post raus zu kopieren und mit nem Editor anzulegen braucht (wie es noch im vorherigen Post von mir der Fall war).


    Nun zur Einrichtung des Ganzen;


    1.)
    In der /etc/mdev.conf folgende Zeile eintragen;
    Code:
    $SUBSYSTEM=usb    root:root 664 @/usr/script/start_usbstick_script.sh
    Die /etc/mdev.conf muss danach insgesamt so aussehen;
    Code:
    console 0:0 0600 
    cpu_dma_latency 0:0 0660 
    fb([0-2]) 0:0 0660 >fb/%1
    i2c-([0-9]) 0:0 0660 >i2c/%1
    mtd([0-9]) 0:0 0660 >mtd/%1
    mtdblock([0-9]) 0:0 0660 >mtdblock/%1
    full 0:0 0666 
    initctl 0:0 0600 
    ircomm[0-9].* 0:20 0660 
    kmem 0:15 0640 
    kmsg 0:0 0660 
    log 0:0 0666 
    loop[0-9].* 0:6 0640 
    mem 0:15 0640 
    network_latency 0:0 0660 
    network_throughput 0:0 0660 
    null 0:0 0666 
    port 0:15 0640 
    ptmx 0:5 0666 
    ram[0-9].* 0:6 0640 
    random 0:0 0666 
    tty 0:5 0666 
    tty.* 0:0 0620 
    urandom 0:0 0666 
    usbdev.* 0:0 0660 
    vcs.* 0:5 0660 
    zero 0:0 0666
    tun[0-9]* 0:0 0640 =net/
    
    pcm.* 0:0 0660 =snd/ 
    control.* 0:0 0660 =snd/ 
    timer 0:0 0660 =snd/ 
    
    event.* 0:0 0660 =input/
    mice 0:0 0660 =input/
    mouse.* 0:0 0660 =input/
    
    rtc0 0:0 0666 =misc/rtc
    
    [hs]d[a-z][0-9]? 0:0    664     */etc/mdev/mdev-mount.sh
    mmcblk[0-9]p[0-9] 0:0   664     */etc/mdev/mdev-mount.sh
    $SUBSYSTEM=usb    root:root 664 @/usr/script/start_usbstick_script.sh
    sr[0-9]          0:0    664     @/usr/bin/bdpoll $MDEV -c
    
    dvb([0-9])\.(.*)([0-9]) 0:0     660     >dvb/adapter%1/%2%3
    
    lcd0            0:0     660     =dbox/lcd0
    oled0           0:0     660     =dbox/oled0
    dboxlcd         0:0     660     =dbox/lcd0
    pvr             0:0     660     =misc/pvr
    vtuner([0-9])   0:0     660     =misc/
    fp0             0:0     660     =dbox/fp0
    
    $MODALIAS=.*    0:0     660 @modprobe "$MODALIAS"

    2.)
    Zunächst mal gaaanz wichtig -> im Script mit Namen start_usbstick_script.sh muss die Variable in Zeile 9 nur mit einem Linux Editor wie
    z.b: Notepad++ auf die eigenen Gegebenheiten angepasst werden, und zwar geht es um folgende Zeile;

    Code:
    USBMEDIUM_UUID="762C-2339"
    Hier muss der Zahlencode (UUID) angepasst werden, und zwar auf die UUID des eigenen USB-Sticks welche Zahlen das sind
    bekommt man bei angestöpselten USB-Stick mit dem telnet Befehl wie folgt heraus;
    Code:
    blkid
    wenn also der Befehl blkid z.b: folgendes zum USB-Stick ausspuckt;
    Code:
    /dev/sdc1: UUID="3310-Z634" TYPE="vfat"
    dann muss man die Variable in Zeile 9 so anpassen das die wie folgt aussieht;
    Code:
    USBMEDIUM_UUID="3310-Z634"
    Danach muss das Script mit Namen start_usbstick_script.sh (ich nenne es hier im Post im weiteren Verlauf nur noch Hauptscript)
    an der Box in das Verzeichnis /usr/script kopiert werden,
    sollte dieses Verzeichnis nicht existieren muss man es wie folgt per telnet Befehl erstellen;
    Code:
    mkdir /usr/script
    Liegt das Hauptscript dann in /usr/script muss es noch mit folgendem telnet Befehl ausführbar gemacht werden;
    Code:
    chmod 755 /usr/script/start_usbstick_script.sh
    Das Hauptscript sollte dann immer auf der Box bleiben, man muss obigen Punkt 2.) also nur einmalig abhandeln.
    Es ist quasi als Starterscript zu sehen welches es überhaupt erst ermöglicht ein weiteres Script auf einem USB-Stick zu starten.

    3.)
    Das zweite Script mit Namen usbstick_script.sh (ich nenne es hier im Post im weiteren Verlauf nur noch Zweitscript)
    muss auf den USB-Stick kopiert werden, und man sollte es auch gleich ausführbar machen, dazu am Besten den USB-Stick
    an der Box anstecken und per Filezilla nachsehen wohin der gemountet ist (muss ein Mountpoint unter /media sein), dann dorthin navigieren mit Filezilla
    und das Zweitscript erstmal dort hin hochladen.

    Jetzt wieder mit Filezilla das Zweitscript auf dem USB-Stick rechts anklicken, auf Dateiberechtigungen gehen und da als numerischen Wert 755 eintragen.

    Nur um nun das Zweitscript auch testen zu können sollte man noch ein Verzeichnis mit Namen test auf dem USB-Stick erstellen
    und in dieses Verzeichnis mit Namen test noch eine leere Datei mit Namen test.txt hineinkopieren (später beim Ablauf noch genaueres dazu).

    Jetzt sollte man abschliessend den USB-Stick manuell umounten - das geht in telnet mit dem Befehl;
    Code:
    umount /dev/sdx1
    wobei natürlich sdx1 mit Eurem device ersetzt werden muss das kann ja durchaus sda1 oder sdb1 oder sonstwas sein.
    Man sollte das aber leicht mit dem telnet Befehl;
    Code:
    mount
    herausfinden können).

    DAS WARS DANN SOWEIT ZUM EINRICHTEN DES GANZEN - MEHR IST DA NICHT ZU TUN !


    Nun kann man testen indem man einfach den USB-Stick mit dem Zweitscript darauf an der Box anstöpselt- was dabei passiert erkläre ich im folgenden beim Ablauf dazu



    Der Ablauf dazu;

    a.)

    Durch den Eintrag in der /etc/mdev.conf (Punkt 1.)) wird durch das Einstöpseln des USB-Sticks (mit dem Zweitscript darauf) das Hauptscript angestossen.

    b.)
    Das Hauptscript wiederum kopiert das Zweitscript vom USB-Stick auf die Box nach /usr/script und startet es von dort aus.

    c.)
    Das Zweitscript ist als Demoscript zu sehen da dieses ja normal vom Anwender auf die individuellen Wünsche hin umgeschrieben werden muss, es ist also nur
    um mal zu sehen was damit möglich wäre. In diesem Fall also gibt das Zweitscript erstmal ne Meldung am TV aus das es gestartet ist, die sieht so aus;

    -screenshot_2017-04-22_17-34-55.jpg

    Danach kopiert es die /text/text.txt welche ja am USB-Stick liegt und leer ist auf der Box nach /tmp
    und schreibt dann den Text "this is a test" in die bis dahin leere Datei text.txt in /tmp auf der Box.

    Es kann also gar nix passieren beim Testen denn mehr ist da nicht.





    Abschliessende Hinweise !

    Weiters übergibt das Hauptscript nun (indem ich ein paar wichtige Variablen exportiere) diese wichtigen Variablen an das Zweitscript
    so das z.b: nachdem das Zweitscript fertig ist der USB-Stick gleich wieder umountet werden kann.

    Mehr will ich da nun nicht mehr gross erklären - hab ja schon genug dazu geschrieben nur eines noch;
    Man kann allles mögliche mit dem Zweitscript auf USB-Stick anstellen wie eben z.b: Dateien vom USB-Stick auf die Box zu kopieren,
    oder irgendwo in eine Datei einen Text schreiben, oder Plugins die auf dem USB-Stick liegen installieren usw, usw, usw...
    , also alles tun was auch sonst in Scripts möglich ist (und das ist echt richtig viel)

    Aber es wäre am Einfachsten wenn man dazu gleich mein Zweitscript als Grundgerüst verwendet - ich zeig es mal
    um zu demonstrieren was drin bleiben sollte und wo man selber seine Befehle reinschreiben sollte.
    Code:
    #!/bin/bash
    
    ## Variablen ##
    SCRIPTNAME=$(basename $0)
    SCRIPTNAME_PART1="${SCRIPTNAME:0:1}"
    SCRIPTNAME_PART2="${SCRIPTNAME:1}"
    NEWSCRIPTNAME=\[${SCRIPTNAME_PART1}\]$SCRIPTNAME_PART2
    BOXIP=http://localhost
    WGET=/usr/bin/wget
    
    ##################################
    ### Hier innerhalb der Zeilen mit
    ### den vielen Raute Zeichen (#)
    ### alles mit den eigenen Variablen
    ### ersetzen.
    ##################################
    
    #MESSAGES="*type=*"
    
    
    # Wechsel in das /tmp Verzeichnis.
    cd $TMP
    
    
    # Generelles Logging.
    exec 3>&1 4>&2
    trap 'exec 2>&4 1>&3' 0 1 2 3
    exec 1>>$LOGFILE 2>&1
    
    
    echo -e "\n\n\n\n!!! Ab hier beginnt das Logging zur $SCRIPTNAME !!!\n\n"
    
    
    # Mittels PIDFILE ermitteln ob dieses Script bereits laeuft.
    # Falls nein wird das Script normal ausgeführt, falls es aber bereits
    # laeuft kommt es zum Abbruch damit es nicht doppelt ausgefuehrt wird.
    PID=$$
    PIDFILE=$TMP/$SCRIPTNAME.pid
    RUN=1
    
    if [ -e "$PIDFILE" ] ; then
        RUNNINGPID="$(cat "$PIDFILE")"
        echo -e "\nLese PID aus der $PIDFILE ...\nPID = $RUNNINGPID\n"
        PROGRAMPID="$(ps ax | grep "\<$NEWSCRIPTNAME\>" | awk '{print $1}')"
        #PROGRAMPID="$(pgrep -f $SCRIPTNAME)"
    
            for i in $PROGRAMPID ; do
                echo "Checke PID der laufenden Scripts ..."
    
                if [ "$i" = "$RUNNINGPID" ] ; then
                    echo "$SCRIPTNAME mit PID $RUNNINGPID laeuft bereits."
                    RUN=2
                    break
                fi
            done
    fi
    
    if [ "$RUN" = "2" ] ; then
        echo -e "\n! ABBRUCH - Zweitstart der $SCRIPTNAME !\n\n"
        exit 1
    fi
    
    # Schreibe PID in PIDFILE
    echo $PID > $PIDFILE
    
    
    
    
    
    ##############################################################################################
    ### Innerhalb der Zeilen mit den vielen Raute Zeichen (#)
    ### sollte man alles mit seinen eigenen Befehlen ersetzen.
    ### Den Rest sowohl darueber als auch darunter so lassen
    ### wie es ist, damit alles korrekt funktionieren kann.
    ### Dient so als Grundgeruest, lediglich ganz oben unter
    ### ## Variablen ##
    ### kann man noch seine eigenen Variablen dazu schreiben.
    
    
    cp -f $USBMEDIUM_MOUNT/test/test.txt $TMP
    echo "this is a test" >> $TMP/test.txt
    ##############################################################################################
    
    
    
    
    
    # USB-Medium umounten.
    echo -e "\n\n"
    umount $USBMEDIUM_DEV
    
    if [ "$?" != "0" ] ; then
        $WGET "$BOXIP/web/message?text=USB-Medium%20$USBMEDIUM_DEV%20umounten%20fehlgeschlagen%20-%20Anweisungen%20im%20$LOGFILE%20folgen&type=2"
        echo -e "\nAlles ok -> $SCRIPTNAME erfolgreich durchgelaufen,"
        echo -e "jedoch folgendes sollte man noch beruecksichtigen.\n\n"
        echo "WICHTIG -> Das USB-Medium (${USBMEDIUM_DEV})"
        echo "manuell in telnet mit folgendem Befehl umounten:"
        echo -e "umount $USBMEDIUM_DEV\n"
        echo -e "Erst danach das USB-Medium abziehen.\n\n"
        exit
    else
        echo -e "$USBMEDIUM_DEV umounten erfolgreich beendet.\n\n"
    fi
    
    
    # Loesche PIDFILE
    rm $PIDFILE
    
    
    ENDDATE="$(date +%a.%d.%b.%Y-%H:%M)" && sleep 7
    $WGET "$BOXIP/web/message?text=$SCRIPTNAME%20erfolgreich%20beendet%20->%20$ENDDATE&type=1&timeout=10"
    
    
    # USBMEDIUM_SCRIPT welches mit Hilfe des
    # Hauptscripts (start_usbstick_script.sh) in
    # den SCRIPTDIR kopiert wurde wieder loeschen.
    #rm $SCRIPTDIR/$SCRIPTNAME
    rm "$0"
    
    if [ "$?" = "0" ] ; then
        echo -e "\n\n"$0" wurde erfolgreich geloescht.\n"
        echo -e "\nAlles ok -> $SCRIPTNAME erfolgreich durchgelaufen.\n"
    fi
    
    
    exit
    
    Gleich vorweg oben unter;
    Code:
    ## Variablen ##
    im orangen Bereich kann man seine Variablen dazu reinschreiben so viele wie man möchte.

    Die eigenen Befehle sollte man im unteren orangen Bereich da zwischen dem in cyan zu sehenden Code reinschreiben
    also da wo der Code in orange zu sehen ist den man dann ja auch sicher überschreiben bzw. löschen wird wenn man sich ein eigenes Script baut
    da dies ja quasi nur ein Demo Code ist.

    Was gibts noch zu sagen ? nun ja es gibt Logging das Logfile liegt unter /tmp an der Box und nennt sich start_usbstick_script.log
    da sollte man reinsehen wenn mal was nicht klappen sollte, und auch wenn man eine Meldung diesbezgl. am TV bekommt,
    da ich im Falle eines Abbruchs oder sonstiger Eventualitäten am TV eine entsprechende Nachricht ausgeben lasse.
    Auch das Zweitscript loggt da hinen, und man muss auch nicht extra zum PC um sich das Logfile anzusehen, dies kann man ja bequem per
    Plugin Dreamexplorer direkt an der Box tun.

    Und noch eines - wer sich ein Zweitscript baut um damit das Image upzudaten dem kanns passieren das dabei wenns im Git ne neue veränderte /etc/mdev.conf gibt
    die selbst editierte /etc/mdev.conf (Punkt 1.)) überschrieben wird beim Update, und das Ganze somit beim nächsten Mal nicht mehr funktoniert.
    Selbes gilt natürlich genauso wenn man das Image anderweitig (also ohne der Hilfe vom Zweitscript) updatet.
    In dem Fall muss man Punkt 1.) dann eben erneut vollziehen.



    Grüsse
    Pike
    Angehängte Dateien Angehängte Dateien
    Geändert von Pike_Bishop (29.04.2017 um 23:38 Uhr)

  4. Thanks -, bic@, sgs bedankten sich
  5. #13
    Pike_Bishop
    Gast
    Hi,

    Also fast immer klappt es voll korrekt aber aus irgendeinem Grund (den ich noch nicht kenne) wird es manchmal doppelt ausgeführt (war heute hier einmal so der Fall)
    mir kommts so vor das passiert wenn ich den Stick nicht gleich perfekt in einem Rutsch einstecke - wer weiss eventuell startet mdev da zweimal aber kann
    auch gut nen anderen Grund haben - muss ich mir näher ansehen denn durch den zweiten Aufruf kanns schon zu Verwirrung kommen
    da dabei dann z.b: zwar der Stick eh schon umountet wurde man jedoch ne Fehler Meldung am TV bekommt da ja durch den zweiten Aufruf das Script nochmal versucht
    zu umounten was ja dann nicht klappen kann.

    Und so denkt der Anwender dann er muss den Stick noch manuell umounten wenn er denn der Meldung am TV folgt und in das Logfile sieht
    jedoch ist der Stick schon längst umountet.
    Das is jetzt zwar absolut ungefährlich aber es sorgt eben für Verwirrung - mal sehen ob ich das abfangen kann im Script.
    Wenns neues gibt meld ich mich wieder.


    EDIT !
    Hier mal ein Log worin man sehen kann das es doppelt gestartet ist;
    Code:
    USB-Stick Mountpoint ermitteln -> Warte 1 Sekunde ...
    USB-Stick Mountpoint ermitteln -> Warte 1 Sekunde ...
    USB-Stick Mountpoint ermitteln -> Warte 1 Sekunde ...
    
    USB-Stick Device = /dev/sde1
    USB-Stick Mountpoint = /media/sde1
    
    
    usbstick_script.sh in /media/sde1 vorhanden.
    
    Kopiere usbstick_script.sh nach /usr/script ...
    
    usbstick_script.sh kopieren erfolgreich beendet.
    
    
    
    
    
    Starte usbstick_script.sh -> Mon.24.Apr.2017-21:32
    
    
    Connecting to localhost (127.0.0.1:80)
    
    message?text=Starte% 100% |*******************************|   168   0:00:00 ETA
    
    
    !!! Ab hier beginnt das Logging zum usbstick_script.sh !!!
    
    
    23884
    usbstick_script.sh = basename
    
    
    
    /dev/sde1 umounten erfolgreich beendet.
    
    
    
    !!! Ab hier beginnt das Logging zum usbstick_script.sh !!!
    
    
    23911
    usbstick_script.sh = basename
    
    Wegen Verdacht auf Zweitstart der usbstick_script.sh
    ist folgender Check noetig:
    
    Lese PID aus der /tmp/usbstick_script.sh.pid ...
    PID = 23884
    
    
    cp: can't stat '/media/sde1/test/test.txt': No such file or directory
    
    
    
    umount: can't unmount /dev/sde1: Invalid argument
    Connecting to localhost (127.0.0.1:80)
    
    start_usbstick_scrip 100% |*******************************|   168   0:00:00 ETA
    
    Alles ok -> usbstick_script.sh erfolgreich durchgelaufen,
    jedoch folgendes sollte man noch beruecksichtigen.
    
    
    WICHTIG -> Das USB-Medium (/dev/sde1)
    manuell in telnet mit folgendem Befehl umounten:
    umount /dev/sde1
    
    Erst danach das USB-Medium abziehen.
    Bis zum Ende des orangenen Code ist alles soweit ok also das Script ist durchgelaufen und hat alles korrekt erledigt + danach den Stick umountet.
    Danach der Code in cyan ist der Zweistart des selben Scripts den es zu verhindern gilt in der Zukunft
    Man sieht das der zweite Durchlauf Ärger mit sich bribngt da angeblich der Stick nicht umountet werden kann und vorher nix kopiert werden konnte usw..
    , aber da dies ja alles schon beim ersten Durchlauf korrekt geschehen ist ist das auch klar denn dabei wurde der Stick ja schon umountet
    dadurch kanns keinen erfolgreichen Zugriff mehr geben beim zweiten ungewollten Durchlauf des Scripts.

    Wie man ebenfalls im Log sehen kann hab ich schon ein bisschen mit pid abfragen gespielt um das Problem zu lösen
    jedoch hat das bislang alles nicht zum Erfolg geführt.
    Es sieht auch fast so aus als ob das Script nicht während dem ersten Durchlauf des Scripts erneut gestartet wird sondern eher
    danach, also das der zweite Durchlauf erst startet wenn das Script das erste Mal fertig durchgelaufen ist das macht die Lösung schwer wenns wirklich so sein sollte.

    Hab inzwischen weiter ne einfache Lösung gebastelt indem ich ein Lockfile erstellen lasse
    welches bei nem zweiten Durchlauf des Scripts vom Script als vorhanden erkannt wird und ich so den zweiten Durchlauf des Scripts abbrechen lassen kann.
    Das würde aber nur dann klappen wenn der zweite ungewollte Durchlauf des Scripts schon startet während das Script sich noch im ersten Durchlauf befindet,
    aber es würde nicht klappen wenn der erste Durchlauf schon abgeschlossen ist und erst dann wie aus Geisterhand das Script nochmal zum zweiten Durchlauf startet.

    Problem bislang ich habs heute bereits 10x getestet und konnte keinen einzigen Doppelstart des Scripts provozieren
    und so kann ich natürlich nix austesten - ich muss also weiter testen und warten bis der Doppelstart von alleine wieder kommt wobei ich sicher weiss der kommt wieder
    nur is die Frage wann denn es kommt wirklich nicht oft vor.
    Das is echt ne Geistergeschichte - na mal sehen wies weitergeht.


    Grüsse
    Pike
    Geändert von Pike_Bishop (25.04.2017 um 22:57 Uhr)

  6. Thanks sgs bedankten sich
  7. #14
    Pike_Bishop
    Gast
    Hi,

    Hab die Scripts aus Post #12 also von hier;
    https://www.opena.tv/skripte/34020-s...tml#post299312
    erneut etwas umgeschrieben und auch neu da hochgeladen.

    Musste dahingehend auch etwas den Text in Post #12 anpassen (also neu lesen ist auch kein Fehler).

    Wie auch immer es sollte nun zu keinen Doppelstart des Scripts vom USB-Stick mehr kommen
    (habe ne PID Abfrage eingebaut) und ausserdem löscht sich das Script mit Namen usbstick_script.sh (also das Zweitscript) zum Schluss
    selbst wieder aus dem Verzeichnis /usr/script (SCRIPTDIR) wohin es ja vom USB-Stick beim Start kopiert wurde (braucht man dann ja sowieso nicht mehr da).
    Am USB-Stick bleibt es aber eh erhalten.


    Grüsse
    Pike

  8. Thanks sgs, Starters bedankten sich

Seite 2 von 2 ErsteErste 12

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:24 Uhr.
Powered by vBulletin® Version 4.2.5 (Deutsch)
Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.
Resources saved on this page: MySQL 4,76%
Parts of this site powered by vBulletin Mods & Addons from DragonByte Technologies Ltd. (Details)
vBulletin Skin By: PurevB.com