Ergebnis 11 bis 14 von 14
-
18.04.2017, 22:17 #11Pike_BishopGast
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
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"
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
, 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
Man sollte das aber leicht mit dem Befehl;
Code:mount
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;
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
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
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
Grüsse
PikeGeändert von Pike_Bishop (18.04.2017 um 23:59 Uhr)
-
Danke - 1 Thankssgs bedankten sich
-
Advertising
-
22.04.2017, 21:19 #12Pike_BishopGast
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
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"
bekommt man bei angestöpselten USB-Stick mit dem telnet Befehl wie folgt heraus;
Code:blkid
Code:/dev/sdc1: UUID="3310-Z634" TYPE="vfat"
Code:USBMEDIUM_UUID="3310-Z634"
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
Code:chmod 755 /usr/script/start_usbstick_script.sh
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
Man sollte das aber leicht mit dem telnet Befehl;
Code:mount
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;
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
Code:## Variablen ##
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
PikeGeändert von Pike_Bishop (29.04.2017 um 23:38 Uhr)
-
Danke - 3 Thanks
-
23.04.2017, 16:07 #13Pike_BishopGast
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.
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
PikeGeändert von Pike_Bishop (25.04.2017 um 22:57 Uhr)
-
Danke - 1 Thankssgs bedankten sich
-
29.04.2017, 23:57 #14Pike_BishopGast
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
-
Danke - 2 Thanks
Lesezeichen