为什么我会收到“ s6-log:致命:无法打开_append / run / service / app / lock:不是目录”?

时间:2019-09-22 15:31:48

标签: linux alpine s6

我正在学习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:致命:无法打开_append / run / service / app / lock:不是目录

?没有s6-log行,一切正常。

1 个答案:

答案 0 :(得分:0)

所以看来我做错了。也就是说,我应该使用s6-svscan而不是s6-supervice。 使用s6-svscan,我可以在服务目录中创建一个log/子目录,以便将我应用的标准输出重定向到记录器的标准输入,如s6-svscan的网站所述:

  

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

我已经这样写了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子目录。