如何从Apache PHP脚本向Uentmon发送信号SIGUSR1(Ubuntu 14.04)

时间:2017-01-28 08:33:50

标签: php linux apache signals daemon

我认为这很简单,但显然不是。

我有一个守护进程(目前正在测试为普通可执行文件),我需要控制它从网页中执行的操作。位于中间的是一个MySQL数据库,其中包含双向传递的所有必要数据。全部都在同一台机器上。

当从网页发出命令时,PHP会将适当的数据放入数据库,守护进程会读取并执行操作。到目前为止,非常好。

但是,守护进程轮询数据库,因此存在时滞。我想要做的是向守护进程发送一条消息,说“现在看”'。所以我想我会给它发一个信号 - SIGUSR1。

当从命令行发送信号(kill -SIGUSR1 ....)时,这非常正常,但不是来自PHP系统(" kill -SIGUSR1 ....")。

所以我想 - 内部shell命令,所以把kill命令放在shell脚本中。同样,从命令行运行时工作正常,但不能从Apache PHP system()API运行。

使用PHP posix_kill()尝试了同样的事情,但也失败了。

似乎是权限问题。 Apache脚本用户无权发出kill命令。所以我想,好吧 - 只是为了进行测试 - SUID脚本。你不能使用SUID脚本,或者它出现。

所以,sudo&#d;在system()调用中的脚本,将脚本和用户(www-data)添加到/etc/sudoers.d,这样就不会有sudo密码提示。脚本中的kill或pkill命令仍然返回代码1(权限被拒绝) - 但它以root身份运行。

所以我被卡住了。这似乎很简单 - 给守护进程发送一个信号来说“醒来”。但是,我找不到办法。

1 个答案:

答案 0 :(得分:0)

嗯,非常奇怪,重新启动后没有其他更改,sudo方法突然起作用。总结:

  1. 创建包含(pkill)命令的脚本
  2. 放入/ usr / local / bin并生成可执行文件
  3. 为此命令添加www-data到sudoers(/etc/sudoers.d中的新文件)
  4. 从PHP Apache脚本调用系统(“sudo / usr / local / bin / script_ name”)