Je dois exécuter ce script avec PHP. L'utilisateur www-data
ne peut pas le faire, j'ai donc modifié le fichier sudoers
:
www-data ALL=(user2) NOPASSWD: /home/user2/bin/test.sh
Le script est exécuté en php avec cette commande:
Sudo -u user2 /home/user2/bin/test.sh
Voici le script test.sh
:
#!/bin/bash
#Stopping previous server
screen -S minecraft -X stuff "stop^M"
#deleting the map file
rm -Rf /home/minecraft/Serveur/*/
# deleting the properties file
rm -f /home/minecraft/Serveur/server.properties
#new server properties
cp /home/minecraft/MapsEtServ.prop/Bloody/server.properties /home/minecraft/Serveur/server.properties
#new map
cp -R /home/minecraft/MapsEtServ.prop/Bloody/'Bloody Mess v1.0' /home/minecraft/Serveur/'Bloody Mess v1.0'
#launching the game server
screen -dmS minecraft Java -Xmx4096M -Xms4096M -jar /home/minecraft/Serveur/minecraft_server.jar nogui
Les autorisations /home/minecraft/Serveur
et /home/minecraft/MapsEtServ.prop
sont définies sur 777.
Que se passe-t-il lorsque j'exécute le script via SSH: tout fonctionne correctement.
Mais quand je l'exécute avec php: l'écran est arrêté, les fichiers sont collés et l'écran est lancé. Mais il y a un problème: le serveur de jeu n'est pas en cours d'exécution.
EDIT: le problème est résolu! Je viens d'ajouter un cd/home/minecraft/Serveur/au début du script et tout fonctionne parfaitement :)
Depuis le terminal, à l'aide de la commande Sudo visudo
, éditez le fichier sudoers
et ajoutez la ligne suivante exactement telle qu'elle:
www-data ALL=(ALL) NOPASSWD: /home/user2/bin/test.sh
Voir https://help.ubuntu.com/community/RootSudo#Allowing_other_users_to_run_Sudo dans ce sens.
Ensuite, en php, utilisez uniquement la commande Sudo /home/user2/bin/test.sh
. Par exemple:
<?php Shell_exec('Sudo /home/user2/bin/test.sh'); ?>