我需要一个应用程序在我的 Web 服务器的后台运行,但我需要能够以 root 权限启动/停止应用程序。
为了做到这一点,我希望运行一个具有 root 权限的服务,以便它可以终止应用程序,并在需要时重新启动它。
最后,我需要能够通过 Apache/PHP 向服务发送启动和终止命令,以便可以通过 Web 间接控制它。
如何创建 Linux 服务?
如何以这种方式与 Linux 服务通信?
提前致谢!
我需要一个应用程序在我的 Web 服务器的后台运行,但我需要能够以 root 权限启动/停止应用程序。
为了做到这一点,我希望运行一个具有 root 权限的服务,以便它可以终止应用程序,并在需要时重新启动它。
最后,我需要能够通过 Apache/PHP 向服务发送启动和终止命令,以便可以通过 Web 间接控制它。
如何创建 Linux 服务?
如何以这种方式与 Linux 服务通信?
提前致谢!
在 PHP 脚本中使用 exec 命令来调用 shell 文件。可以使用“setuser”位设置 shell 文件,以便它将作为其所有者运行(而不是使用 Web 服务器的权限运行)。
当然,你需要非常小心——大量的测试、监控等。
最后,考虑以专用用户而不是 root 用户身份运行的服务。例如,像 apache 和大多数其他做得好的服务一样。
补充: Re:在 Linux 中运行服务。取决于你的 Linux 风格。如果您想确保您的应用服务在失败时会自动重新启动,加上日志记录,请查看 Runit:
https://web.archive.org/web/1/http://blogs.techrepublic%2ecom%2ecom/opensource/?p=202
补充:我认为弗兰克建议(在评论中)使用 sudo 系统而不是 setuid 位更好。
所以,你在这里有三个部分:
您的问题不是启动守护程序,而是编写它,并从 Web 服务器与其通信,而不需要 root 权限。
守护进程可以像在后台启动的非交互式应用程序一样简单:
# my_dameon &
我不是 php 开发人员,但是在搜索消息队列和 php 时,我发现了beanstalkd
查看第一页上的示例,您似乎可以使用它来执行以下操作:
您可以创建一个接受以下命令的守护程序:
daemon_name start
daemon_name stop
daemon_name restart
deamon_name reload
启动守护进程应该不难。只需daemon_name start
从 PHP 脚本执行即可运行它。启动后,您可以将进程的 PID 写入锁定文件(用于稍后停止、重新启动或重新加载)。守护进程应该处理信号。
在 PHP 脚本中,您可以随后调用daemon_name stop
. 这应该会启动一个新的守护进程,它将检查锁定文件并获取正在运行的守护进程的 PID,并发送一个将由正在运行的守护进程处理的信号。应该删除/清除锁定文件,然后stop
启动守护程序/进程可以退出。
我想你应该看一下inetd
,它可以配置为运行各种服务,并且它以 root 身份运行。然后,您可以编写一个相对简单的程序,该程序本身不是 root 特权,但当由 root 运行时,它可以完成您需要完成的任务。
至于与服务通信,您没有说明它是什么类型的服务,但是假设您自己编写它,最常见的方法是通过 UNIX 套接字或 MMAP 进行通信。真的取决于你的需求。
哦,是的,应该指出已经有用于 linux 系统的 web 管理的应用程序。Webmin是一个非常好的工具,可以根据需要进行配置以允许尽可能多的控制。
正如@shodanex 所建议的那样,使用 Beanstalkd 将是断开 Web 前端与以 root 身份运行的命令行工作者的绝妙方法。它可以简单地设置为只运行所需的内容。
为了运行 worker,Pear 的 System_Daemon可以生成并运行一个守护进程运行脚本,带有 start/stop/restart。
这样做时要非常非常小心。切勿在 exec 命令中使用任何用户从 Web 提交的数据。这可能允许某人在您的机器上任意执行命令。
另外,我第二次 Frank 使用 sudo 规则,因此您可以使用所需的权限运行该特定命令,但仅此而已。这样会更安全。
当然与
sudo apt-get install openbsd-inetd
你可以创建你想要的服务