Debian:通过网络终止 Screen 会话

Debian:通过网络终止 Screen 会话

我有如下的php代码(kill.php):

<?php echo exec("/home/duke/aa/scripts/test.sh");  ?>

test.sh 如下所示:

screen -S server -X quit

如果我在终端运行 php 代码,php screen -S server -X quit脚本就会终止屏幕会话。

然而,如果我将我的网络浏览器指向http://我的网站/test.php,它显示“未找到屏幕会话”,并且不会终止屏幕会话。我该怎么做才能让它通过网络浏览器工作?

答案1

默认配置是将所有 PHP 页面(及其生成的命令)运行为www-data用户,这意味着他们只能访问www-data

您需要在自己的用户帐户下运行该脚本,可以通过以下方式完成:

  • 使用sudo;例如,以下sudoers入口:

    www-data: ALL=(duke) NOPASSWD: /home/duke/aa/scripts/test.sh
    

    会让你跑exec("sudo -u duke /home/duke/aa/scripts/test.sh");

  • 或安装苏普:PHP 脚本将在其所有者的帐户下运行。


您当前的示例运行脚本两次,这可能会产生各种副作用。如果您想显示脚本的输出,请删除第二个exec()调用(或者更好的方法是使用system()或代替)。passthru()

答案2

我猜测原因是您以 Web 服务器用户以外的其他用户身份启动屏幕会话(可能www-data),但由于脚本在通过浏览器启动时将以 Web 服务器用户身份运行,因此它无权向其他用户的屏幕会话发送命令。

如何修复此问题取决于您最初如何启动屏幕会话。如果可以以 Web 服务器用户身份启动它,这将是最简单的解决方案,但其他选项可能包括 sudo 或更复杂的措施 (*)。告诉我们您正在做什么,以便我们可以提出有用的建议。

(*) 我已经看到了针对此类问题的“解决方案”,其中 PHP 脚本将写入一个特殊文件,该文件由 cronjob 检测到,只有当该文件存在时才会开始工作......

相关内容