无法在 Cent OS 7 上打开 PID 文件查看 Apache 状态

无法在 Cent OS 7 上打开 PID 文件查看 Apache 状态

在 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 发行版相反,您必须手动完成所有设置。

执行以下操作:

  1. 打开 httpd.conf 文件并将 PID 文件设置为 /run 中的文件:

    PidFile "/run/httpd.pid"
    
  2. 打开你的 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(尚未?):没有此文件或目录

相关内容