我正在学习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", "."]
只是一个简单的脚本
#!/bin/sh
while true;
do
sleep 1
printf "Hello %s\n" "$(date)"
done
以及
#!/bin/execlineb -P
fdmove -c 2 1
s6-log -b n20 s1000000 t /var/log/app/
/run/service/app
为什么我总是
s6日志:致命:无法打开附加/run/service/app/lock:不是目录
? 没有
./rootfs/app
行,一切正常。 最佳答案
看来我做得不对。也就是说我应该用s6-svscan
而不是s6-supervice
。
使用s6-svscan
我可以在我的服务目录中创建log/
子目录,以便我的应用程序的stdout被重定向到logger的stdin,如s6-svscan
网站上所述:
对于它找到的每个新子目录dir,扫描器会在其上生成一个s6监控进程。如果存在DR/log,它会在DIR和DIR/log上产生S6监督过程,并将从不停止的管道从服务的STDUT保持到记录器的STDIN。
我写过这样的脚本:
#!/bin/execlineb -P
s6-log -b n20 s512 T /var/log/app
因此我将
run
更改为CMD ["s6-svscan", "/run/"]
其中
CMD
包含我的服务的/run/service/
脚本(不包含run
调用)和s6-log
子目录以及上面的log
脚本。