Webserver停止写入命名pipe道

我试图debugging一个工作正常,直到大约一个星期前。 我有一个脚本可以访问我的networking服务器,它什么都不做,只是在现有的命名pipe道中写入一个值:

#!/bin/bash pipe=/tmp/al_webui echo 5 > $pipe 

该脚本使用sudo进行调用,并且Web服务器可以通过在visudo执行它。

这已经在过去,但现在没有出现在命名pipe道。 如果我手动执行脚本,写入成功,如果Web服务器调用它没有任何反应。 我没有收到任何错误消息。 我可以在/var/log/auth.log看到正确调用的脚本:

 Sep 4 12:22:30 luc sudo: www-data : TTY=unknown ; PWD=/srv/www/htdocs/al ; USER=root ; COMMAND=./al_webui_trigger.sh Sep 4 12:22:30 luc sudo: pam_unix(sudo:session): session opened for user root by (uid=0) Sep 4 12:22:30 luc sudo: pam_unix(sudo:session): session closed for user root 

日志列出其他脚本调用都是成功的(尽pipe它们不会尝试写入命名pipe道)。

因为我没有得到错误的文件path或权限错误(在path中故意引入错误立即显示auth.logchmod 777不会改变任何东西),所以我已经用尽了想法。 有人有一个想法如何在这一点上进行?

我正在Debian Stretch上运行这个,并且自从我升级了Jessie之后,错误可能已经开始,但是我不确定这是否连接。

原来PrivateTmp设置是罪魁祸首,我认为这个行为在升级过程中已经改变了。 这意味着Web服务器服务自动与其私有临时目录相关联,因此写到与我正在阅读的pipe道不同的pipe道。 解决scheme是从这里采取:

 mkdir /etc/systemd/system/apache2.service.d echo -e "[Service]\nPrivateTmp=no" > /etc/systemd/system/apache2.service.d/privatetmp.conf systemctl daemon-reload systemctl restart apache2 systemctl show apache | grep PrivateTmp 

这为apache进程使用的专用configuration创build一个目录。 在configuration文件中,只列出了一个条目,覆盖了我们必须更改PrivateTmp的值并将其设置为false 。 其余部分重新加载systemctl守护进程,重新启动Web服务器并检查更改是否成功。

在决定这是否适合您的解决scheme之前,请注意共享tmp目录的安全影响。