Bilder machen und hochladen

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

    ich hab mit dem folgenden Skript ein Bildupload realisiert:

    Bash
    #!/bin/sh
    NAME=$(date +%m-%d-%y_%H-%M-%S)
    DATEI=$NAME.jpg
    ZIEL=raspi/Foto/
    PFAD=/opt/webcam/
    echo "$DATEI"
    echo "$PFAD$DATEI"
    sudo raspistill -t 100 -o /opt/webcam/$DATEI
    sleep 3
    sudo /opt/Dropbox-Uploader/dropbox_uploader.sh upload $PFAD$DATEI $ZIEL$DATEI


    klappt von der Konsole super, wenn ichs aber über rcswitch-rest über die Webschnittstelle mit
    sudo /opt/webcam/foro.sh aufrufe knipst er aber er ladet es nicht hoch Oo wieso das??

  • Warum basteln alle mit sudo rum bevor sie überhaupt verstanden haben wie es funktioniert?

    sudo ist Nutzerabhängig. Du mußt vorher festlegen, was der jeweilige Nutzer mit sudo starten darf. Wenn Du das Script startest muß der Nutzer als der Du arbeitest, warscheinlich Pi, den Befehl mit sudo nutzen dürfen, wenn es über die Weboberfläche, also vom Webserver gestartet werden soll muß es der Nutzer des Webservers, beim Pi meist www-data, dürfen.

    Einmal editiert, zuletzt von orb (3. August 2013 um 18:07)

  • Danke, ist mir heut bei 10 Grad auch wieder eingefallen ;)

    habs foto.sh skript nun in /etc/sudoers eingetragen als Aufruf

    Code
    www-data ALL=(ALL) NOPASSWD: /opt/webcam/foto.sh
    www-data ALL=(ALL) NOPASSWD: /opt/Dropbox-Uploader/dropbox_uploader.sh


    aber es will immer noch nicht den Dropbox-Teil ausführen

    edit: auth.log

    Code
    Aug  4 21:15:07 raspberrypi sudo:     root : TTY=unknown ; PWD=/opt/rcswitch-rest ; USER=root ; COMMAND=/opt/Dropbox-Uploader/dropbox_uploader.sh upload /opt/webcam/08-04-13_21-15-03.jpg raspi/Foto/08-04-13_21-15-03.jpg
    Aug  4 21:15:07 raspberrypi sudo: pam_unix(sudo:session): session opened for user root by (uid=0)

    Einmal editiert, zuletzt von StillResonance1614 (4. August 2013 um 21:23)

  • habs foto.sh skript nun in /etc/sudoers eingetragen als Aufruf

    Code
    www-data ALL=(ALL) NOPASSWD: /opt/webcam/foto.sh
    www-data ALL=(ALL) NOPASSWD: /opt/Dropbox-Uploader/dropbox_uploader.sh

    Pack das vielleicht in eine Zeile und ohne unnötige Leerzeichen, sodass die Zeile dann so aussieht:

    Code
    www-data ALL=NOPASSWD:/opt/webcam/foto.sh,/opt/Dropbox-Uploader/dropbox_uploader.sh

    So funktioniert das bei mir


    Ansonsten zeig uns bitte dein PHP Code

  • hmm komisch , aber teste ich mal meigrafd

    hab ja noch mehr Skripte die genauso eingetragen sind und funktionieren

    und in die foto.sh ist ja die erste, und das dropbox-uploader.sh is ein riesen Skript von GitHub, das kann ich net so einfach in mein Mini Foto.sh bauen.

  • das sollte nicht das Problem sein.

    Ich kann das Skript selbst ja aufrufen per ./foto.sh

    aber wenns die Webschnittstelle soll dann geht alles außer dem Dropbox Befehl :(

  • Ich denke aber weiterhin das

    Code
    www-data ALL=(ALL) NOPASSWD: /opt/webcam/foto.sh
    www-data ALL=(ALL) NOPASSWD: /opt/Dropbox-Uploader/dropbox_uploader.sh

    ein fehlerhafter Eintrag ist

    probier es doch nur mal aus Spass so wie ich es in Post#6 vorgeschlagen habe und kommentier deine anderen Zeilen aus ( # an den Anfang der Zeile )

    Alternativ versuchst du es mit deinen Zeilen, wovon ich glaube das sie falsch sind, und versuchst darüber mal einen Befehl über den Webserver auszuführen (über den Browser zum anklicken) den nur root ausführen kann, wie zb "reboot" - dann weisst du ob deine /etc/sudoers Zeile so ( www-data ALL=(ALL) NOPASSWD: /sbin/reboot ) überhaupt funktionieren kann...

  • die Zeile stimmt, die hab ich für 10 andere skripts genau so

    desweiteren schlägt es wohl um sich

    auf meinem Raspbmc kann ich aus einem Bash Skript keine sachen starten Oo

    Bash
    #!/bin/sh
    logfile=/var/log/cron.5min
    
    
    #Testet ob der Airplay Dienst laeuft
    if [ $(ps -A | grep -c shairport) = 0 ];
    then
        echo "$(date) Airplay wiederbeleben" >> $logfile
        sudo /etc/init.d/shairport start
    fi

    [font="Monaco, Consolas, Courier, monospace"]sudo /etc/init.d/shairport start[/font]

    [font="Monaco, Consolas, Courier, monospace"]geht wenn ichs als pi user ausführe aber nicht in dem skript[/font]
    [font="Monaco, Consolas, Courier, monospace"]den echo macht er in die logfile aber er führt den befehl nicht aus[/font]

    wobei das am crontab hängt oder den berechtigungen von
    cron*/1 * * * * sudo sh /etc/cron.5min/prozesscheck.sh

    weil echo darf er aber keine programme ausführen??

    edit: selbst wenn ichs per sudo crontab -e in den root crontab eintrage führt er den bekackten Befehl nicht aus

    Einmal editiert, zuletzt von StillResonance1614 (4. September 2013 um 22:54)

  • Ich dreh gleich durch es bringt irgendwie alles nichts

    selbst wenn ich cron in die sudoers eintrage kann er kein skript ausführen das in einem anderen Skript ist.

    so ein Dreck, das geht auf Ubuntu oder debian auch so


  • weil echo darf er aber keine programme ausführen??

    Wenn mit "sudo" ein Script ausgeführt wird, werden alle dadrin befindlichen Befehle mit root Rechten ausgeführt


    selbst wenn ich cron in die sudoers eintrage kann er kein skript ausführen das in einem anderen Skript ist.

    cron in sudoers einzutragen macht auch kein sinn..

    Raspbian oder RaspBMC basiert auf Debian bzw ist es quasi (Ubuntu basiert ebenfalls auf Debian) und das funktioniert bei mir ja auch also macht ihr irgendwas untypisches


    Wenn ein Script bei manueller Ausführung funktioniert aber nicht über cron, dann prüft in /var/log/syslog ob dort Fehlermeldungen drin stehen - da ihr das Script über cron jede Minute ausführt, müsste also jede Minute entweder drin stehen das es ausgeführt wurde oder das es ein Fehler beim ausführen gab... Zum Beispiel:

    Code
    Sep  5 19:43:01 raspberrypi /USR/SBIN/CRON[8006]: (root) CMD (/root/cpugraph.sh >/dev/null 2>&1)
    Sep  5 19:44:01 raspberrypi /USR/SBIN/CRON[8020]: (root) CMD (/root/cpugraph.sh >/dev/null 2>&1)


    PS: Man kann ein Script auch mit Debug-Ausgabe ausführen, durchs einfügen von " -x "
    Also bei einem /bin/sh Script: sh -x /path/to/script.sh
    Bei einem /bin/bash Script: bash -x /path/to/script
    Oder permanent durchs einfühen von set -x irgendwo im Script, dann wird alles nachstehende mit Debugausgabe in der Konsole angezeigt was er macht usw

    PPS: /bin/sh ist etwas anderes als /bin/bash.. bash ist der Nachfolger von sh und kann mehr - sh kann dementsprechend weniger...
    Die Dateiendung ".sh" bedeutet nur Shebang, kann aber auch weggelassen werden wie es zB beim raspi-config Script auch der Fall ist.. Entscheident ist das in der ersten Zeile der Interpreter steht: #!/bin/sh oder #!/bin/bash oder #!/usr/bin/python usw

Jetzt mitmachen!

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