Apache 错误:启动后PID文件/run/httpd/httpd.PID不可读(尚未?)。(阿帕奇)

Apache 错误:启动后PID文件/run/httpd/httpd.PID不可读(尚未?)。(阿帕奇),apache,archlinux,Apache,Archlinux,有人知道Apache的错误日志(特别是在Arch Linux中)中出现此错误的原因吗 该错误并没有阻止Apache正常运行(一旦启动),但可能会显著降低我的服务重启时间 任何指导都将不胜感激。解决方案是调整文件/usr/lib/tmpfiles.d/apache.conf。默认值是错误的。你必须改变这个 d /run/httpd 0755 root root - 到 重新启动apache后,将使用chown http:http而不是chown root:root创建PID文件 资源:

有人知道Apache的错误日志(特别是在Arch Linux中)中出现此错误的原因吗

该错误并没有阻止Apache正常运行(一旦启动),但可能会显著降低我的服务重启时间


任何指导都将不胜感激。

解决方案是调整文件
/usr/lib/tmpfiles.d/apache.conf
。默认值是错误的。你必须改变这个

d /run/httpd 0755 root root -

重新启动apache后,将使用
chown http:http
而不是
chown root:root
创建PID文件

资源


我的看法是,这个bug是一个功能:我所做的任何事情都无法消除它(尝试了这里建议的一切,然后又尝试了一些),但软件运行得很好。所以,我认为这是一个有点错误的成功信息——我已经开始了

我遇到了这个问题:

启动后PID文件*.PID不可读(尚未?)

最近几天,我的apache服务器是根据发布的包进行编译的,版本是
httpd-2.4.12.tar.gz
。这是我的httpd.service内容,之后我的问题得到了解决。希望这能帮助任何遇到过这一问题的人

[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
ExecStart=/usr/local/apache/bin/apachectl start -DFOREGROUND
PIDFile=/run/apache/apache.pid
ExecReload=/usr/local/apache/bin/apachectl restart
ExecStop=/user/local/apache/bin/apachectl stop
PrivateTmp=True

[Install]
WantedBy=multi-user.target

(1)
/run/httpd
是否存在(您想将pid文件放在哪里?(2)apache作为任何用户运行都可以写吗?
/run/httpd
确实存在。apache是在user:group http:http下运行的,但是pid文件的模式是root:root。为什么systemd要将pid文件创建为root:root?是否有任何方法可以更改此设置?可能,父进程是以
root
的身份运行的(除非您实际以HTTP用户而不是root用户的身份启动apache,另请参见)。一个选项是使用更理想的umask(使pid文件可读,但不能通过
HTTP
写入)。父进程以root用户的身份运行,但这些行位于我的httpd.conf文件中:
用户HTTP组HTTP
我不运行archlinux(在Debian中,我把它放在
envvars
),但是(尽管建议编辑
rd.d
脚本是我通常希望避免的事情)。顺便说一句,你确定它会减慢启动速度吗?我认为它只会延迟/阻止启动检测,但apache仍在运行。我今天运行了一个更新,它也停止了工作。另一方面,在还原到
根目录后,它停止了永远的启动。如图所示。当你在前台启动一个进程时,你应该使用
Type=simple
。此外,不需要使用
PIDFile
d /run/httpd 0755 http http -
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
ExecStart=/usr/local/apache/bin/apachectl start -DFOREGROUND
PIDFile=/run/apache/apache.pid
ExecReload=/usr/local/apache/bin/apachectl restart
ExecStop=/user/local/apache/bin/apachectl stop
PrivateTmp=True

[Install]
WantedBy=multi-user.target