Oppure

Loading
01/05/17 21:18
archemi
Ciao a tutti

Ho un raspberry con un sensore di "motion detection"
Per gestire la possibilità di accenderlo e spegnerlo ho una pagina web con uno switch.
Una pagina web in php su un server apache attiva e disattiva

<?php
    // file attiva.php
    exec('sudo -u www-data python /var/www/html/tel/motion.py start');
?>


Dal server web non fa partire il daemon runner python ma se mando un comando qualunque funziona (esempio) per cui il problema è nel far partire il file pyhton
exec('echo "start" > active');


il mio file sudo visudo è configurato così:
www-data ALL=NOPASSWD: /usr/bin/python, /var/www/html/tel/motion.py, /var/www/html/invia.php


il file invece python che fa partire mi manda un'email quando rileva un movimento:
#!/usr/bin/python
from gpiozero import MotionSensor
from datetime import datetime
import time
import os
import smtplib
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from daemon import runner

class App():
    def __init__(self):
        self.stdin_path = '/dev/null'
        self.stdout_path = '/dev/tty'
        self.stderr_path = '/dev/tty'
        self.pidfile_path = '/tmp/foo.pid'
        self.pidfile_timeout = 5
    def run(self):
        print("Attivazione sensore movimento")

        pir = MotionSensor(4)
        contatore = 0
        time.sleep(1)

        print("Sensore pronto")
        while True:
            if pir.motion_detected:
                contatore += 1
                
                #Console
                print("Movimento rilevato : "+str(contatore))
                
                #email
                
                msg = MIMEMultipart()
                msg['Subject'] = 'telecamera movimento'
                msg['From'] = 'xx@gmail.com'
                msg['To'] = 'xx@gmail.com'
                text = MIMEText("Movimento rilevato alle "+datetime.now().strftime("%H.%M.%S del %d/%m/%Y"))
                msg.attach(text)
                                
                s = smtplib.SMTP('smtp.gmail.com', 587)
                s.ehlo()
                s.starttls()
                s.ehlo()
                s.login('xx@gmail.com', 'psw')
                try:
                    s.sendmail('xx@gmail.com', 'xx@gmail.com', msg.as_string())
                    print("Email inviata")
                except:
                    print("Email non inviata")
                s.quit()
                
                time.sleep(2)
            time.sleep(0.1)

app = App()
daemon_runner = runner.DaemonRunner(app)
daemon_runner.do_action()


Anche lo script se lo mando da solo funziona (se non lo faccio partire come sudo non va)
sudo python motion.py start


Il tutto funziona da terminale se mando il comando
php active.php


Se invece mando dal sito web NON FUNZIONA!!! PERCHE??? Tutto il giorno e non ho risolto nulla...
...sito web.../attiva.php


Come posso fare? ci sto impazzendo
Grazie per qualunque genere di aiuto
Ultima modifica effettuata da archemi 01/05/17 21:40
aaa
01/05/17 22:09
archemi
Se metto
<?php 
	$out = shell_exec('sudo -u www-data python /var/www/html/tel/motion.py start 2>&1');
	print_r($out);
?>


Questo è l'output che mi da:
Sorry, user www-data is not allowed to execute '/usr/bin/python /var/www/html/tel/motion.py start' as www-data on pi.

Anche cambiando nel visudo queste impostazioni non cambia nulla
www-data ALL=NOPASSWD: ALL


se faccio un ls -l
-rwxrwxrwx 1 www-data www-data 211 mai 2 00:05 attiva.php
drwxrwxrwx 2 www-data www-data 4096 mai 1 16:55 css
-rwxrw-rw- 1 www-data www-data 78 mai 1 23:26 disattiva.php
-rwxrw-rw- 1 www-data www-data 1186 mai 1 16:40 index.php
-rwxrwxrwx 1 www-data www-data 2380 mai 1 22:02 motion.py
Ultima modifica effettuata da archemi 01/05/17 22:10
aaa
01/05/17 22:37
archemi
Ho risolto
il problema stava in questa dichiarazione nel file python (evidentemente funziona con l'utente del ssh ma non con www-data)

#self.stdout_path = '/dev/tty'
#self.stderr_path = '/dev/tty'

self.stdout_path = '/var/www/html/tel/tty'
self.stderr_path = '/var/www/html/tel/tty'


e visudo
www-data ALL=(ALL:ALL) NOPASSWD:ALL

aaa