Bash Script über PHP ausführen

  • Hallo,
    ich habe ein kleines Problem ich habe schon das ganze IE durchgesucht und nichts passendes gefunden. Da ich in Linux noch ein Anfänger bin, stehe ich im Moment vor ein großes Problem.
    Ich habe ein Script "FS20-Aktor01-Ein.sh" die kann ich über der Console ausführen. Das funktioniert. Nun möchte ich die gerne über ein Button in einer PHP Datei ausführen. Das funktioniert leider nicht. Wenn ich aber statt der brash Script ein Phyton Script benutze klappt es.


    Hier mal ein Ausschnitt aus meiner php Datei:


    [code=php]?php
    if($FS20_Aktor01 == 0){
    if($wert1 == 1) {
    echo "<td><a href='/cgi-bin/relais1ein.py' target='mb01'><button class='SchalterEin'>Einschalten&nbsp</button></a></td>";
    } else {
    echo "<td><a href='/cgi-bin/relais1aus.py' target='mb01'><button class='SchalterAus'>Ausschalten</button></a></td>";
    }
    } else {
    if ($_SESSION['Aktor01'] == "aus") {
    echo "<td><a href='/cgi-bin/FS20-Aktor01-Ein.sh' target='mb01'><button class='SchalterEin'>FS20-einsch</button></a></td>";
    } else {
    echo "<td><a href='/cgi-bin/FS20-Aktor01-Aus.sh' target='mb01'><button class='SchalterAus'>FS20-aussch</button></a></td>";
    }
    }


    ?>[/php]


    Die Dateien "relais1ein.py und relais1aus.py" funktionieren. Die anderen beiden leider nicht.
    Was mache ich dort falsch?
    Könnt Ihr mir bei dem Problem helfen ?

    • Official Post

    Das IE? Wenn dann den IE (Internet Explorer). Wie bist du denn vorgegangen als du die python scripte zum laufen gebracht hast? Diesen Weg musst du noch mal gehen und an der stelle wo du die python scripte definierst das Bashzeug hinterlegen. Denn, einfach so laufen auch keine python scripte wenn sie vom Browser aufgerufen werden.

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

  • und immer dran denken das der user www-data das Recht hat dein Python Skript auszuführen. Ich vermute hier ein Berechtigungsproblem oder falsche Pfadangaben in der .sh datei.

  • Erst einmal Danke für eure schnelle Antwort. Aber was ändert sich denn wenn ich den Script direkt Aufrufe "./FS20-Aktor01-Ein.sh" gegenüber wenn ich ihn in der PHP Seite aufrufe?


    Aber vielleicht übersehe ich ja etwas deswegen hier einmal meine Scripte:
    meine PHP Datei liegt im Verzeichnis "/var/www/html/relais"
    meine 2 Scripte liegen im Verzeihnis "/var/www/html/cgi-bin"
    Die Scripte habe ich auch schon admin Rechte gegeben. Hat aber auch nichts genützt.


    Mein Script "FS20-Aktor01-Ein.sh"
    [code=php]#!/bin/bash


    echo -n -e "\x02\x06\xF1\x04\xA3\x00\x11\x11" > /dev/ttyAMA0


    [/php]
    und hier der Script "relais1ein.py"
    [code=php]#!/usr/bin/python3
    # coding=utf-8
    import RPi.GPIO as GPIO
    import relaisdef as rdef


    # PIN Nummern verwenden
    GPIO.setmode(GPIO.BOARD)


    # PINs auf Ausgabe setzen
    GPIO.setup(rdef.GP0, GPIO.OUT)


    # Schalte Relais 1 ein
    GPIO.output(rdef.GP0, GPIO.LOW)


    [/php]


    Wie gesagt ich habe nur das Problem mit den bash Script. Vielleicht geht es besser wenn ich den String nicht als bash sondern in ein Phyton Sricpt einbinde. Nur da weiß ich nicht wie ich es in Phyton umsetzen muss. Das hatte ich nicht hinbekommen.

  • Nein das sind zwei ganze andere Sachen.
    Mit der "relais1ein.py" klar Steuer ich die GPIO und mit der "FS20-Aktor01-Ein" das sind diese Steckdosen Aktoren mit der Fernbedienung. Und zwar von ELV. An der Seriellen Schnittstelle ist ein Sender den ich damit ansteuern möchte.
    Ich konnte jetzt noch etwas mehr Feststellen, habe mir den Debug vom Internet Explorer angesehen, der gibt mir eine Fehlermeldung mit "500 Internal Server Error".
    Habe deswegen noch einmal alles angesehen auch mit den Berechtigungen. Die sind alle gleich. Irgendwie bin ich wie vor dem :wallbash: gestoßen.

  • Auch dann kann man "Python Webserver" einsetzen, weil du dann auch ganz einfach das Python Module "serial" verwenden kannst und diese extra Umwege über bash usw vermeiden kannst, denn das sind mögliche Fehlerquellen.


    Ansonsten würde ich prüfen ob der Webserver Benutzer überhaupt berechtigt ist auf /dev/ttyAMA0 zuzugreifen.


    IE gilt by the way als ziemlich unsicher und eigenwillig... Microsoft hält sich kaum an allgemeine Standards, viele HTML Geschichten sind mit IE seit jeher speziell. Du solltest also lieber Firefox o.ä. verwenden - hauptsache irgendwas anderes als IE.

  • Danke meigrafd für die Info
    Ich habe bei mir als Server den lighttpd und als Datenbank den mysql installiert .
    Ist das der Richige Webserver, oder welchen soll ich dafür als alternativ verwenden?
    Aber den SQL-Server kann ich benutzen, oder?
    Endschuldige das ich so nachfrage bin noch etwas auf Hilfe angewiesen, da ich mich erst seid kurzen mit den Raspberry beschäftige und mit Linus hatte ich bis heute nichts zu tun.