Linux 找不到由 PHP 启动的进程

Linux can't find process started by PHP

我目前正在 运行 自己的 Minecraft 服务器,我想构建一个选项来通过 PHP 重启 Minecraft 服务器,这样我的朋友就可以在不需要访问权限的情况下重启 MC 服务器到我的实际服务器。

因此,首先我想创建一个脚本来启动服务器:

startup.php

<?php 

    chdir('/home/minecraft/minecraft_server/');
    exec("./start");

?>

开始

screen -mdS "minecraft_up" java -Xmx4G -Xms4G -jar server.jar nogui

经过一些权限问题等,通过调用 webadress 可以启动服务器。
现在,我的问题是我无法访问屏幕进程。

当运行宁ps -ef我得到:

     UID     PID    PPID  C   TTY        TIME CMD
www-data   29642       1  0     ?    00:00:00 SCREEN -mdS minecraft_up jav
www-data   29643   29642 99 pts/5    00:02:07 java -Xmx4G -Xms4G -jar serv

当运行宁sudo pwdx 29642获取进程位置时我得到:

29642: /home/minecraft/minecraft_server

但是当我进入 /home/minecraft/minecraft_server 目录并 运行 screen -lssudo screen -ls 时,两次我都得到:

No Sockets found in /run/screen/S-minecraft.

对比:在终端中手动执行start文件时,当运行ning screen -ls时其实可以看到进程(或者用screen -r打开):

There is a screen on:
        29025.minecraft_up      (01/24/2021 01:32:45 PM)        (Detached)
1 Socket in /run/screen/S-minecraft.

我也得到了相同的工作目录,但我无法在进程启动时手动 运行 启动文件 py PHP 仍然是 运行ning.

我真的不是Linux方面的专家,我猜是有一些用户权限干扰或者PHP被当作自己的用户,我真的不知道,这就是我问的原因。

如何访问由 PHP 启动的这个进程?

要使用 systemd 创建服务:

/etc/systemd/system/ 中创建一个名为 minecraft-server.service 的文件,内容如下:

[Unit]
Description=Minecraft server 
After=network.target
StartLimitIntervalSec=0

[Service]
Type=simple
Restart=always
RestartSec=1
User=minecraft
Group=appmgr
ExecStart=java -Xmx4G -Xms4G -jar server.jar

[Install]
WantedBy=multi-user.target

用完整路径替换 server.jar

现在让我们创建新的组和用户。

要创建新组 运行,请执行以下命令:

sudo groupadd appmgr

现在让我们创建新用户并将其添加到一个组中。

sudo useradd –G appmgr minecraft

现在您的服务已创建,我们需要启用它并运行它是第一次。

systemctl enable minecraft-server
systemctl start minecraft-server

编写 php 脚本以重新启动服务的最后一步:

<?php 
    exec("systemctl restart minecraft-server");
?>