在 Cent OS 7 上执行 systemctl status httpd.service 时发现以下内容。Apache 2.4.41 已编译并安装。在 Cent OS 6 上没有这样的消息。
systemd[1]: 启动后无法打开 PID 文件 /var/run/httpd.pid (目前还无法打开):没有此文件或目录
尽管显示状态服务器启动和停止均运行正常。
这是服务文件:
cat /run/systemd/generator.late/httpd.service
# Automatically generated by systemd-sysv-generator
[Unit]
Documentation=man:systemd-sysv-generator(8)
SourcePath=/etc/rc.d/init.d/httpd
Description=LSB: start and stop Apache HTTP Server
Before=shutdown.target
After=remote-fs.target
After=network-online.target
After=nss-lookup.target
After=distcache.service
Wants=network-online.target
Conflicts=shutdown.target
[Service]
Type=forking Restart=no
TimeoutSec=5min
IgnoreSIGPIPE=no
KillMode=process
GuessMainPID=no
RemainAfterExit=no
PIDFile=/var/run/httpd.pid
ExecStart=/etc/rc.d/init.d/httpd start
ExecStop=/etc/rc.d/init.d/httpd stop
ExecReload=/etc/rc.d/init.d/httpd reload
/etc/httpd/conf/extra/httpd-mpm.conf
<IfModule !mpm_netware_module>
PidFile "/var/run/httpd.pid"
</IfModule>
任何想法?
答案1
您看到此错误是因为您从源代码编译并安装了 Apache,但尚未正确配置。
如果该文件/var/run/httpd.pid
不存在,则需要更正它。在我的 CentOS 7 系统上,包含 Apache 版本,它位于/run/httpd/httpd.pid
您可以在单元文件中更改路径。但是,如果您想运行比 CentOS 附带的版本更新的版本,我建议从软件包存储库安装 Apache,否则您将遇到许多类似问题,必须进行故障排除。
当您自己编译和安装软件时,您将必须自己支持它。
答案2
看起来您的 Apache 配置文件中PidFile
不存在或未根据您的.service
文件进行设置。您应该将其设置为PidFile /var/run/httpd.pid
以消除此错误,或者更改您的.service
文件以设置现有 Apache pid 文件的正确路径。
答案3
如果你读到这个:https://www.freedesktop.org/software/systemd/man/systemd.service.html#PIDFile=
它说:
PID文件=
采用指向服务 PID 文件的路径。建议对 Type= 设置为 forking 的服务使用此选项。指定的路径通常指向 /run/ 下的文件。如果指定了相对路径,则以 /run/ 为前缀。
因为您在 httpd.service 中提到的 PID 文件的路径是相对于 /run 的,所以您不应该将 /run 添加到您的 PID 文件路径中。
因为您已经从源代码安装了 Apache,所以您会收到该错误,与您的 Linux 发行版相反,您必须手动完成所有设置。
执行以下操作:
打开 httpd.conf 文件并将 PID 文件设置为 /run 中的文件:
PidFile "/run/httpd.pid"
打开你的 httpd.service(位于 /etc/systemd/system/ 中)并在 [Service] 下输入 systemd 应该找到的 PID 文件名:
[Service] Type=forking ExecStart=/usr/local/apache2/bin/apachectl start ExecStop=/usr/local/apache2/bin/apachectl graceful-stop ExecReload=/usr/local/apache2/bin/apachectl graceful # systemd will add /run to your relative path. # therefore, your httpd PID file in /run/httpd.pid can be found PIDFile=httpd.pid PrivateTmp=true LimitNOFILE=infinity
以上两个步骤将消除此错误:... httpd-latest.service:启动后无法打开 PID 文件 /var/run/httpd.pid(尚未?):没有此文件或目录