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

Mic*_*ser 6 openbsd daemon rc

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

# rcctl start httpd
httpd(failed)
Run Code Online (Sandbox Code Playgroud)

但是,当只输入 开始时httpd,它会起作用;但这不是要走的路,我想。/var/log/messages不包含任何提示,也不包含任何其他文件/var/log/

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

server "default" {
        listen on * port 80
}
Run Code Online (Sandbox Code Playgroud)

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

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

Kus*_*nda 7

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


XXX_flags变量的唯一“特殊”值/etc/rc.conf.local是两个字母 string NO,它禁用相应的服务。这是大多数 OpenBSD 服务的默认值(请参阅/etc/rc.conf,您永远不应修改)。

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

# rcctl enable httpd
Run Code Online (Sandbox Code Playgroud)

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

httpd_flags=
Run Code Online (Sandbox Code Playgroud)

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

的值httpd_flagshttpd在启动时传递给实际的守护程序。例如,您可以使用以下命令读取替代配置文件

httpd_flags=-f /etc/httpd.conf.local
Run Code Online (Sandbox Code Playgroud)

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

# rcctl set httpd flags -f /etc/httpd.conf.local
Run Code Online (Sandbox Code Playgroud)

最好使用而rcctl不是/etc/rc.conf.local直接使用编辑器进行修改。


Mic*_*ser -2

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

httpd_flags=NO
Run Code Online (Sandbox Code Playgroud)

和 /etc/rc.conf.local 包含

httpd_flags=
Run Code Online (Sandbox Code Playgroud)

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