Я должен выполнить этот скрипт с PHP. Пользователь www-data
не может этого сделать, поэтому я изменил файл sudoers
:
www-data ALL=(user2) NOPASSWD: /home/user2/bin/test.sh
Сценарий выполняется в php с помощью этой команды:
sudo -u user2 /home/user2/bin/test.sh
Вот 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
/home/minecraft/Serveur
и /home/minecraft/MapsEtServ.prop
разрешения установлены на 777.
Что происходит, когда я выполняю скрипт через SSH: все работает нормально.
Но когда я запускаю его с php: экран останавливается, файлы вставляются и экран запускается. Но есть проблема: игровой сервер не работает.
РЕДАКТИРОВАТЬ: Проблема решена! Я просто добавил cd / home / minecraft / Serveur / в начале скрипта, и все работает просто отлично:)
Из терминала, используя команду sudo visudo
, отредактируйте файл sudoers
и добавьте следующую строку в том же виде:
www-data ALL=(ALL) NOPASSWD: /home/user2/bin/test.sh
См. https://help.ubuntu.com. / community / RootSudo # Allowing_other_users_to_run_sudo в этом смысле.
Тогда в php используйте только команду sudo /home/user2/bin/test.sh
. Например:
<?php shell_exec('sudo /home/user2/bin/test.sh'); ?>