NEWS
Frage zu einem Shell Script (Raspberry)
-
Hallo
Ich hätte da mal eine Frage, evtl. kann mir da jemand weiterhelfen.
Auf meinem Pi läuft der IoBroker und das HabPanel wird mittels Midori auf einem Display dargestellt.
Bei einer Änderung, habe ich bisher immer manuell die Midori Session gekillt und neu gestartet.
Nun war meine Idee, daß ich das direkt über ein Button auf dem HabPAnel machen könnte.Ich bin nun schon soweit, daß ich ein php File habe, daß mir auch erfolgreich ein Shellscript ausführt.
Nun zu meinem Problem:Ich habe ein Shellscript (midori-restart.sh) mit folgendem Inhalt:
sudo kill -9 $(ps -ef | grep midori | grep -v grep | awk '{print$2}') & sleep 3 sudo xinit ./startMidori.sh &
wenn ich das dann mit ./midori-restart.sh aufrufe, wird das auch alles erfolgreich ausgeführt.
Also Midori Session wird gekillt und anschließend wieder gestartet.In dem php script folgendes:
<?php if ($_GET['run']) { # This code will run if ?run=true is set. #exec("/path/to/name.sh"); $script = "sudo /home/pi/midori-restart.sh"; $run=`$script`; } ?> <!-- This link will add ?run=true to your URL, myfilename.php?run=true --> <style type="text/css"> a { color: #ffffff; text-decoration: none; } </style> <a href="?run=true">Display restart</a>
Hier wird dann allerdings nur die Midori Session beendet, aber nicht erneut gestartet.
Das selbe ist dann der Fall wenn ich das Script mit sudo ./midori-restart.sh ausführe, wird ebenfalls nur die Midori Session gekillt, aber nich erneut gestartet.
Wenn ich in dem php script das sudo weg lasse, wird das Script nicht mehr ausgeführt.
Kann mir da jemand nen Tipp geben, an was das genau liegt?!
-
@sugram Nun ich bin kein Shell Script Guru - bei sowas ist evtl. @Thomas-Braun ein geeigneter Ansprechpartner.
Ich würde mal auf folgende Fehler tippen:
- Wenn Du das script von irgendeinem Verzeichnis aus startest, dann ist wahrscheinlich das aktuelle Verzeichnis ein anderes und deshalb wird das Skript startMidoir.sh nicht gefunden. Also wäre ggf. eine absolute Pfadangabe oder ein Wechsel in das Verzeichnis sinnvoll.
- ggf. würde ich statt in einem Script den Restart auszuführen, auch das Killen des alten Prozesses und den Neustart des Prozesses über startMidort.sh getrennt ausführen.
Eventuell überprüfen ob die Shellskripts ausführbar sind und eigentlich sollte die 1. Zeile in den Skripts mit dem
#!/bin/bash
beginnen.
-
Es spielt keine Rolle, ob ich das Script so sudo ./midori-restart.sh oder sudo /home/pi/midori-restart.sh ausführe.
Es wird hierbei nur die midori Session gekillt.
Ohne dem sudo klappt das Script ja auch einwandfrei.Das mit dem getrennt ausführen ist ja so ne Sache, ich möchte das ja über das Display erledigen.
Wenn ich die midori Session gekillt habe, müsste ich dann auf dem Display auf der Konsole ja wieder einen Befehl eingeben.
Aber da hängt jetzt keine Tastatur dran und ich wollte das eigentlich auch automatisieren.sobald ich in dem script
#!/bin/bash
eintrage, geht das ganze nicht mehr, denn das hatte ich am Anfang auch drin. -
Nur so ein Gedanke.
Wenn einer weiß wie man den PHP Code dahin verändert, daß er nach dem klick das eine script startet danach 2 sec wartet und dann ein weiteres script startet, würde ich das "Problem" umgehen.
Also das eine Script beendet die Midori session und das ander startet diese weider.
Aber mittels mangelnder PHP Kenntnisse kann ich das leider nicht alleine umsetzen. -
@sugram
Kann kein php - aber hab mal nachgeschaut - müsste auch mit sleep(2); gehen -
Ja, wie gesagt kann ich auch kein PHP
Folgendes mal einfach ausprobiert, aber ohne Erflog.
<?php if ($_GET['run']) { # This code will run if ?run=true is set. #exec("/path/to/name.sh"); $script = "sudo /home/pi/midori-restart.sh"; sleep(3); exec("sudo /home/pi/Midori-Display-start.sh"); $run=`$script`; } ?> <!-- This link will add ?run=true to your URL, myfilename.php?run=true --> <style type="text/css"> a { color: #ffffff; text-decoration: none; } </style> <a href="?run=true">Display restart</a>