我必须用 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/Servereur/,一切正常 :)
答案1
从终端,使用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'); ?>