18910140161

PHP执行命令关闭Linux服务器

顺晟科技

2021-06-16 10:55:46

377

对于项目中的需求,希望用户可以在后台关闭/重启内网服务器,记录功能实现的过程

这些功能主要分为三个部分:

Linux相关命令

Php执行系统命令

服务器权限问题

关机命令

我选择使用关机命令关机,如下所示

关机[-t秒] [-rkhncfF]时间[消息]

参数描述:

-t秒:在几秒钟后设置关机程序

-k:并不是真的关机,它只是向所有用户发出警告信息。

-r:关闭并重新启动

-h:停机后停机

-n:不使用正常程序关机,而是使用强制方法杀死所有正在运行的程序并自行关机

-c:取消正在进行的关机操作

当-f:关闭时,不要执行fcsk操作(检查Linux文件系统)

-F:在关闭时被迫执行fsck动作

时间:设置关机时间

消息:向所有用户发送警告消息

举几个例子:

立即关机并重启

关机-现在#立即关机并停止机器

关机-r10 # 10分钟后重启

关机-r 10:00 # 10 10点钟重启

Shutdown -t5 -r现在#立即重新启动,但是在警告和删除进程之间有5秒钟的延迟。

关机-c #取消之前的关机命令

当然,还有其他关机命令,如关机、重启、暂停、初始化,大致使用如下

halt[-n][-w][-d][-f][-I][-p][-h]

重新启动[-n] [-w] [-d] [-f] [-i]

断电[-n] [-w] [-d] [-f] [-i] [-h]

Php执行系统命令

Php提供了以下方法来执行系统命令

Exec():执行外部程序

返回命令执行结果的最后一行。如果您想要获取命令的输出内容,请确保使用输出参数

System():执行外部程序(命令行)并显示输出

这个函数会直接输出结果(注意是直接输出而不是返回值)。命令成功后,它将返回最后一行输出,如果失败,它将返回FALSE

Shell_exec():通过Shell环境执行命令,并以字符串形式返回完整的输出

命令执行输出。如果在执行过程中出现错误或者进程没有产生输出,则返回空值

Passthru():执行外部程序并显示原始输出

你可以在这里选择任何方法。总之,您应该在php文件中执行关闭服务器的命令

exec(' shut down-h now ');

服务器权限

如果服务器有多个角色,在实际执行关机命令时,将出现以下错误

请在关闭抑制剂并注销其他用户后重试操作。

或者,忽略抑制剂和带有“systemctl reboot -i”的用户。

在这种情况下,您可以通过使用sudo命令来执行关机来关机,所以它涉及到一个问题,如何在php文件中调用sudo,我找到了一个解决方案来配置etc/sudoers文件中的以下权限

% xxxall=(all)no passwd : all//将xxx组下的用户设置为使用sudo,无需输入密码

首先要做的是获取执行php脚本的用户,一般是www-data。如果您不清楚,可以使用以下方法在php文件中获取用户名

系统(' whoami ');

另一个问题是,向用户开放所有的无秘密权限风险太大。我们只需要打开关机权限,所以最终的配置应该是

% www-data ALL=(ALL)nopasswd :/sb in/shut down

在php文件中执行

exec(' sudo shut down-h now ');

相关文章
我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航