S6-overlay技术疑问:移除contents.d服务后oneshot服务仍启动
关于s6-overlay中oneshot服务启动的问题解答
user/contents.d目录的作用范围覆盖所有服务类型(包括longrun和oneshot),并非只针对longrun服务。你遇到的oneshot服务仍启动的情况,大概率是以下原因:- 依赖链触发:s6-rc会自动解析服务间的依赖关系,如果某个已启用的服务(不管是longrun还是oneshot)声明依赖这个oneshot服务,那么即使你没在
contents.d里列它,它也会被启动来满足依赖。 - 默认组关联:部分基础oneshot服务会被归类到
default组中,而default组是s6-overlay默认启用的,所以这类服务会自动启动,不受contents.d直接条目影响。
- 依赖链触发:s6-rc会自动解析服务间的依赖关系,如果某个已启用的服务(不管是longrun还是oneshot)声明依赖这个oneshot服务,那么即使你没在
排查与解决方法:
- 查看该oneshot服务目录下的
dependencies文件,确认是否有其他已启用服务依赖它; - 执行命令
s6-rc-db list-dependencies user <你的oneshot服务名称>,可以直观看到它的依赖触发链; - 如果要彻底禁用该oneshot服务,除了从
contents.d移除相关条目,还可以在该服务的目录下创建一个空的noauto文件,强制阻止它被自动启动。
- 查看该oneshot服务目录下的
内容的提问来源于stack exchange,提问作者Eric B.
相关产品推荐
相关产品推荐

