如何在 OpenBSD 上使用 rcctl 正确启用 httpd,使其自动启动?

如何在 OpenBSD 上使用 rcctl 正确启用 httpd,使其自动启动?

在运行 OpenBSD 6.2 amd64 的 OpenBSD 机器上,无法使用 rcctl 启动 httpd:

# rcctl start httpd
httpd(failed)

然而,当刚开始输入 时httpd,它就可以工作了;但我想这不是正确的方法。/var/log/messages不包含任何提示,也不包含任何其他文件/var/log/

我的/etc/httpd.conf比较简单:

server "default" {
        listen on * port 80
}

/var/www存在并/var/www/htdocs包含手动启动时提供的文件。指定“root”/etc/httpd.conf没有效果。

我怎样才能httpd自动启用/启动rcctl

答案1

您的问题是httpd守护进程被赋予了无效的命令行参数(字符串YES)开始使用时rcctl因此无法正常启动。


XXX_flags中变量的唯一“特殊”值/etc/rc.conf.local是两个字母的字符串NO,它会禁用相应的服务。这是大多数 OpenBSD 服务的默认值(请参阅/etc/rc.conf,您应该绝不调整)。

使用 root 身份启用服务rcctl,例如

# rcctl enable httpd

在 的情况下httpd,这将写入该行

httpd_flags=

into /etc/rc.conf.local,这将启用该httpd服务。

的值将在启动时httpd_flags传递给实际的守护进程。httpd例如,您可以让它读取替代配置文件

httpd_flags=-f /etc/httpd.conf.local

rcctl可以/etc/rc.conf.local这样修改:

# rcctl set httpd flags -f /etc/httpd.conf.local

使用它比直接使用编辑器rcctl进行修改更好。/etc/rc.conf.local

答案2

为了将来可能遇到类似问题的其他人参考,从 rcctl 获取日志的最简单方法是执行rcctl -d start httpd,这至少有助于诊断问题。

答案3

正如 Kusalananda 指出的,/etc/rc.conf 必须包含

httpd_flags=NO

和 /etc/rc.conf.local 包含

httpd_flags=

启用 httpd 或不属于 httpd 的任何内容以使其禁用。

相关内容