Executer script shell avec php

Salut, apres 2h a regarder le net a ma solution je ne trouve rien qui fonctionne. apparemment un problème de droit simplement.
je cherche a executé une commande shell via php.
c’est pour un projet d’ecole.
la commande de base : exec(‹ sudo node-red start ›);
j’ai aussi tester exec(‹ sudo cp /var/www/html/ProjetJeanne/test.txt /var/www/html/ProjetJeanne/test2.txt >2&1 ›);
aucun des deux ne fonctionne.
echo exec(‹ pwd ›); me retourne bien /var/www/html/ProjetJeanne
echo exec(‹ whoami ›); me retourne www-data
j’ai donc fait sudo chown -R www-data /var/www/html/ProjetJeanne et sudo chmod -R 777 /var/www/html/ProjetJeanne

alors la c’est le pire, non seulement ca marche pas et en plus je ne peut meme plus modifier les fichiers avec mon utilisateur pi !

une idee ?

Bonjour
Je ne comprend pas pourquoi tu veux démarrer Node-red à partir de php. Node-red fonctionne en toile de fond tu le démarres une fois pour toute en démarrant le RPI.
Le php fonctionne avec l’identifiant www-data et donc n’a pas les droits sudo. Et il est extrêmement dangereux de donner les droits sudo au php.

Car le projet nodered recupere des informations en continue d’un automate exterieur qui simule une ligne de production.
je cree donc un site en php qui sert a lancer une production et a avoir le suivis d’une production.
le seul moyen de simuler la nouvelle production est de redémarrer nodered qui lui cree une nouvelle production et repart a zero.
le site fonctionne impeccable, la base de donnée aussi mais du coup je redémarre en manuel a chaque fois que je clic sur ‹ démarrer une production ›. dans le projet web tout dois etre automatique, il ne manque plus que ca a faire.
un node-red start au clic de ‹ demarer production ›, et un node-red stop au clic de ‹ arret de production ›.
pour les droit php se n’est pas trop grave puisqu’il n’y a que ca d’installer dessus, le serveur apache et nodered, aucun autre fichier.
apres si il y a une autre solution … pourquoi pas. j’ai bien testé de cree un bouton sur nodered qui coupe le flux de donnee mais ca ne fonctionne pas correctement.

hello,

pour un problème similaire de lancement de commande systemctl j’avais utilisé l’immonde bidouille suivante :
. une page php :

<?php
$restart_line = shell_exec('/home/pi/ssh_restart.sh');
echo "$restart_line <br>\n";
?>

et un script (ssh_restart.sh) avec les droits exécution pour tout le monde ( ou restreint à www-data ) avec dedans :

#! /usr/bin/expect -f

set force_conservative 1;

set timeout 2
spawn ssh pi@127.0.0.1
expect "Are you sure you want to continue connecting (yes/no)?"
send "yes\n"
expect "password: $"
send "password\n"
expect "pi@raspberrypi:~ $"
send "sudo systemctl restart nodered\n"
expect "pi@raspberrypi:~ $"
send "exit\n"
interact

ça évite de donner des droits au serveur il suffit d’installer « expect » … le ssh reste local, expect automatise la connection ssh …
dans ton cas le lancement de nodered par systemctl doit être aussi une possibilité

merci mais deja de base je ne peut pas executer le ssh_restart.sh donc ne reste non plus.
un petit chmod +x et un chmod 755 voir 777 mais rien n’a faire. par contre ca marche si je l’execute en ssh.

bizarre ! sur nginx

nginx version: nginx/1.14.2
php 7.1

et sur apache :

PHP Version 7.0.33-0+deb9u10
Build Date 	Oct 6 2020 17:08:28
Server API 	Apache 2.0 Handler 

ça fonctionne avec :
-rwxr-xr-x pi pi pour le ssh dans /home/pi
et
-rw-r--r-- www-data www-data pour le php dans /var/www/html

tes logs te disent quoi ? ( php, apache ? nginx ? )
as tu essayer avec le php dans une console ?
php ssh_restart.php

J’ai trouver une page pour le droit.

sudo visudo /etc/sudoers
ensuite pour les tests :
www-data ALL=(ALL) NOPASSWD:ALL

avec ca mes commandes fonctionne impeccable
c’est dangereux je sais, donc j’essaie de suite le site pour autoriser uniquement mes 2 commandes mais visudo me dit erreur.

essai 1 :
www-data ALL=(ALL) NOPASSWD:node-red-start
www-data ALL=(ALL) NOPASSWD:node-red-stop

essai 2 :
www-data ALL=(ALL) NOPASSWD: nodered

Cmnd alias specification

Cmnd_Alias nodered = node-red-start,node-red-stop