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

问题描述 投票:0回答:1

我正在学习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行,一切正常。

linux alpine s6
1个回答
0
投票

所以看来我做错了。即我应该使用s6-svscan而不是s6-supervice。使用s6-svscan,我可以在服务目录中创建s6-svscan子目录,以便将我的应用程序的stdout重定向到记录器的stdin,如在log/的网站上所述:

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

我已经这样写了s6-svscan脚本:

run

并因此将#!/bin/execlineb -P s6-log -b n20 s512 T /var/log/app 更改为

CMD

其中CMD ["s6-svscan", "/run/"] 包含用于我的服务的/run/service/脚本(无run调用)和具有上述s6-log脚本的log子目录。

© www.soinside.com 2019 - 2024. All rights reserved.