PHP - Lancer des processus shell dans une page php
Table des matières
Il est nécessaire de posséder screen sur le serveur :
Si on veut s'assurer que le script ne soit lancé qu'une fois, on nomme notre screen et on vérifie s'il existe :
Il suffit de mettre sudo dans la commande (et d'avoir accessoirement sudo d'installé) :
Oui, mais , qui renseigne le mot de passe ??
Solution "bourrin" :
<div class="formatter-container formatter-blockquote"><span class="formatter-title title-perso">/etc/sudoers :</span><div class="formatter-content">www-data ALL = NOPASSWD: ALL</div></div>
Se référer à l'article Sudo : Utiliser et paramétrer pour plus d'infos.
Introduction
Lancer une commande et afficher le résultat dans la page
Code PHP :
<?php $output = shell_exec('cat /etc/hosts'); echo "<pre>$output</pre>"; ?>
Afficher périodiquement les 20 dernières lignes d'un fichier de log
Code PHP :
<?php header("Refresh: 1;url=http://192.168.18.4/syslog.php"); $output = shell_exec('tac /var/log/syslog | head -n20'); echo "<pre>$output</pre>"; ?>
Lancer un script détaché de la page php
Il est nécessaire de posséder screen sur le serveur :
Code PHP :
<?php shell_exec('screen -dm sleep 60'); ?>
Si on veut s'assurer que le script ne soit lancé qu'une fois, on nomme notre screen et on vérifie s'il existe :
Code PHP :
<?php $val = shell_exec('screen -ls | grep -c php '); //echo $val; if ( $val < 1 ) { shell_exec('screen -dmS php sleep 60'); } else { echo "La commande a déja été lancée"; } ?>
Lancer un script en root
Il suffit de mettre sudo dans la commande (et d'avoir accessoirement sudo d'installé) :
Code PHP :
<?php $output = shell_exec('sudo id'); echo "<pre>$output</pre>"; ?>
Oui, mais , qui renseigne le mot de passe ??
Solution "bourrin" :
<div class="formatter-container formatter-blockquote"><span class="formatter-title title-perso">/etc/sudoers :</span><div class="formatter-content">www-data ALL = NOPASSWD: ALL</div></div>
Se référer à l'article Sudo : Utiliser et paramétrer pour plus d'infos.