如何解决Linux 找不到 PHP 启动的进程 如何访问这个由 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
经过一些权限的痛苦等,通过调用 web 地址可以启动服务器。
现在,我的问题是我无法访问屏幕进程。
运行 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 -ls
或 sudo screen -ls
时,两次我都得到:
No Sockets found in /run/screen/S-minecraft.
相反:在终端手动执行启动文件时,运行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 仍在运行时,我无法手动运行启动文件。
我真的不是 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");
?>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。