【发布时间】:2017-06-13 22:50:54
【问题描述】:
我以为这会很简单,但显然不是。
我有一个守护进程(目前正在作为普通可执行文件进行测试),我需要控制它在网页上的作用。位于中间的是一个 MySQL 数据库,其中包含双向传递的所有必要数据。都在同一台机器上。
当从网页发出命令时,PHP 将适当的数据放入数据库,守护进程读取并执行操作。到目前为止,一切顺利。
但是,守护进程轮询数据库,因此存在时间滞后。我想要做的是向守护进程发送一条消息,说“现在看”。所以我想我会向它发送一个信号 - SIGUSR1。
当信号是从命令行发送时(kill -SIGUSR1 ....),但不是从 PHP - system("kill -SIGUSR1 ....") 发送信号时,这绝对可以正常工作。
所以我想 - 内部 shell 命令,所以将 kill 命令放在 shell 脚本中。同样,从命令行运行时可以正常工作,但不能从 Apache PHP system() API 运行。
使用 PHP posix_kill() 尝试了同样的事情,但也失败了。
似乎是权限问题。 Apache 脚本用户无权发出 kill 命令。所以我想,好吧 - 无论如何只是为了测试 - SUID 脚本。您不能 SUID 脚本,否则它会出现。
因此,在 system() 调用中对脚本进行 sudo 处理,将脚本和用户 (www-data) 添加到 /etc/sudoers.d,这样就不会出现 sudo 密码提示。脚本中的 kill 或 pkill 命令仍然返回代码 1(权限被拒绝) - 但它以 root 身份运行。
所以我被困住了。这似乎是一件简单的事情 - 向守护进程发送一个信号说“醒来”。但是,我找不到这样做的方法。
【问题讨论】:
标签: php linux apache signals daemon