我认为这很简单,但显然不是。
我有一个守护进程(目前正在测试为普通可执行文件),我需要控制它从网页中执行的操作。位于中间的是一个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身份运行。
所以我被卡住了。这似乎很简单 - 给守护进程发送一个信号来说“醒来”。但是,我找不到办法。
答案 0 :(得分:0)
嗯,非常奇怪,重新启动后没有其他更改,sudo方法突然起作用。总结: