0

我正在学习s6并且已经到了想要使用s6-log. 我有以下Dockerfile

FROM alpine:3.10

RUN apk --no-cache --update add s6

WORKDIR /run/service

COPY \
  ./rootfs/run \
  ./rootfs/app /run/service/

CMD ["s6-supervise", "."]

./rootfs/app只是一个简单的sh脚本

#!/bin/sh

while true;
do
  sleep 1
  printf "Hello %s\n" "$(date)"
done

run存在

#!/bin/execlineb -P
fdmove -c 2 1
s6-log -b n20 s1000000 t /var/log/app/
/run/service/app

为什么我不断收到

s6-log:致命:无法 open_append /run/service/app/lock:不是目录

? 没有这s6-log条线,一切都很好。

4

1 回答 1

1

所以看来我一直做错了。即我应该使用s6-svscan而不是s6-supervice. 使用s6-svscan我可以在我的服务目录中创建一个log/子目录,以便我的应用程序的标准输出被重定向到记录器的标准输入,如s6-svscan's website 所述:

对于它找到的每个新子目录 dir,扫描器都会在其上生成一个 s6-supervise 进程。如果 dir/log 存在,它会在 dir 和 dir/log 上生成一个 s6-supervise 进程,并维护从服务的标准输出到记录器的标准输入的永不关闭的管道。

我写run了这样的脚本:

#!/bin/execlineb -P
s6-log -b n20 s512 T /var/log/app

并且我已经改变CMD

CMD ["s6-svscan", "/run/"]

其中/run/service/包含run我的服务的脚本(没有s6-log调用)和上面脚本log的子目录run

于 2019-09-22T16:06:28.780 回答