![如何在 OpenBSD 上使用 rcctl 正确启用 httpd,使其自动启动?](https://linux22.com/image/125778/%E5%A6%82%E4%BD%95%E5%9C%A8%20OpenBSD%20%E4%B8%8A%E4%BD%BF%E7%94%A8%20rcctl%20%E6%AD%A3%E7%A1%AE%E5%90%AF%E7%94%A8%20httpd%EF%BC%8C%E4%BD%BF%E5%85%B6%E8%87%AA%E5%8A%A8%E5%90%AF%E5%8A%A8%EF%BC%9F.png)
在运行 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 的任何内容以使其禁用。