Quand tu es sous terminal ou en ssh, tu es en utilisateur « pi », il peut en autres utiliser le « bash », l’un des support pour lancer des commandes.
L’utilisateur du serveur Web Apache, utilise « www-data » ou « apache », ce dernier à une interdiction de login, ce qui veux dire qui ne peut ni accéder au terminal ou via le ssh si un « humain » déciderais de l’utiliser, dans le cas ici, il inerdit a l’application de ce connecter en tant qu’utilisateur. Par la suite, tu as le support de commande qui est limité, il n’est pas sur le bash, il ne peut donc pas exécuter des scripts.
J’utilise ma solution avec mon serveur pour lancer des fermetures ou redémarrage du système.
L’idée est de créer un formulaire, moi j’utilise mon CMS perso et je fais un appel en Ajax sur le script. Ce script permet de créer une demande d’action. Apache/PHP arrive à écrire un fichier sans problème.
Par la suite, tu crée un cron job a tout les minutes, (il aurais aussi moyen de charger une commande en script de démarrage qui surveille la création/modification d’un fichier et exécute une commande si ça arrive, mais je n’ai pas cherché à l’exploitter), il va lancer le même scrip, mais sous l’utilisateur « pi » dans ton cas, il va vérifier si une demande est fait, si oui, la consulte et exécute la commande requise.
Je te fournis mon code pour t’aider. (Je code mes textes en anglais dans mes scripts de base, évite des problème par les caractères spéciaux sous certaines consoles de commandes/navigateur)
Ce code est très basique est ne doit pas être accessible de l’extérieur (Internet), il y a aucune sécurité.
Tu dois faire une demande via fichier.php?a=action-désiré[&v=valeur]
Tu dois vérifier avec la commande php fichier.php check
Le fichier « action.rq » est créé dans le même dossier que le fichier du script.
<?php
error_reporting(E_ALL & ~E_NOTICE & ~E_WARNING & ~E_STRICT & ~E_DEPRECATED);
ini_set("display_errors", 1);
function writeAction($act,$value=false){
echo "<pre>";
if($fp = fopen(dirname(__FILE__)."/action.rq", 'w+')){
fwrite($fp, "<?php \$makeAction=\"".$act."\";".(($value!==false)?" \$makeValue=\"".$value."\";":""));
fclose($fp);
echo "Requesting a ".$act." with success.\n";
}
else echo "Error to write in ".dirname(__FILE__)."/action.rq, action ".$act." can't be requested.\n";
echo "</pre>";
}
if($argv[1]) $action=$argv[1];
else $action=$_GET['a'];
if($argv[2]) $value=$argv[2];
else $value=$_GET['v'];
switch($action){
case 'nopower':
case 'shutdown':
writeAction("shutdown",$value);
break;
case 'reboot':
writeAction("reboot");
break;
case 'powerback':
case 'cancel':
writeAction("cancel");
break;
case 'check':
if(file_exists(dirname(__FILE__)."/action.rq")){
echo "Action request found...\n";
require(dirname(__FILE__)."/action.rq");
@unlink(dirname(__FILE__)."/action.rq");
echo "Requested: ".$makeAction.", trying...\n";
if($makeAction=="shutdown") {
if(!is_numeric($makeValue) || $makeValue<=0) $time=10; //default
else $time=$makeValue;
echo "Shutdown in ".$time."mins...\n";
echo system("/sbin/shutdown -P +".$time." 1>/dev/null")."\n";
echo "Done\n";
}
else if($makeAction=="reboot") {
echo "Reboot now...\n";
echo system("/sbin/shutdown -r now 1>/dev/null")."\n";
echo "Done\n";
}
else if($makeAction=="cancel") {
echo "Cancel shutdown...\n";
echo system("/sbin/shutdown -c 1>/dev/null")."\n";
echo "Done\n";
}
else {
echo "Error, action invalid.\n";
}
}
else echo "PDone\n";
break;
default:
echo "Invalid action\n";
}