在 Docker Compose 中写多行文本
之前列举过 在 Taskfile 中写多行文本,在 Docker Compose 中也有写 heredoc 的需要
services:
first:
image: alpine
entrypoint:
- /bin/sh
- "-c"
- |
echo hello
echo goodbye
second:
image: alpine
entrypoint: /bin/sh -c
command:
- |
echo hello
echo goodbye而在 Dockerfile 中呢,是这样 Introduction to heredocs in Dockerfiles | Docker
RUN <<EOF
apt-get update
apt-get upgrade -y
apt-get install -y ...
EOF向 Docker Compose 服务传递主机上 certbot 管理的证书
使用 Init Container 预先使用主机上的证书和私钥填充 volume,传递给以非特权身份运行的服务容器,解决有的服务在容器中自行 useradd,以非 root 身份运行应用进程,无法读取到私钥的问题。
services:
main:
image: openlistteam/openlist:latest
volumes:
- app-certs:/certs:ro
depends_on:
cert:
condition: service_completed_successfully
cert:
image: alpine
volumes:
- /etc/letsencrypt/live/list.home.kokomi.site:/etc/letsencrypt/live/list.home.kokomi.site:ro
- /etc/letsencrypt/archive/list.home.kokomi.site:/etc/letsencrypt/archive/list.home.kokomi.site:ro
- app-certs:/certs
entrypoint:
- /bin/sh
- -c
- |
cp -L /etc/letsencrypt/live/list.home.kokomi.site/fullchain.pem /certs/fullchain.pem
cp -L /etc/letsencrypt/live/list.home.kokomi.site/privkey.pem /certs/privkey.pem
chown 1001:1001 /certs/*.pem
chmod 600 /certs/*.pem
volumes:
app-certs:通达信 PLAYSOUND 函数
PLAYSOUND1 函数在每根 K 线只会触发一次,所以在日 K 上很难触发。但分时图(1 分钟线)甚至更低的 5 秒线,以及每次加载新的旧数据也会触发。
需要有实际输出,且值为 1 才能触发,例如:A:C>0,PLAYSOUND1,但 A:=C,PLAYSOUND1 就不行
不能添加到 DRAWICON 后缀上,否则不会绘制图标
通达信在分时图中取昨日最高价
这些文章提出了一些方式:
它们在 K 线图上是有效的,但在分时图上需要 Alt + 3多显示几天分时图才能计算,而且各有各的问题
SUMBARS在多日分时图缺少前一根 K 线,会回退到今日开盘价,行为完全错误BARSLAST需要前一根 K 线,所以多日分时图的第一天无法计算
REF(CLOSE, SUMBARS( DATE<>REF(DATE, 1), 1));
REF(CLOSE, BARSLAST(DATE<>REF(DATE, 1)) + 1);另外我还探索出这种方法,效果与 BARSLAST 相同。
VALUEWHEN(DATE<>REF(DATE, 1), REF(CLOSE, 1));附赠一个昨日开盘价作为副产物
VALUEWHEN(DATE<>REF(DATE, 1), CLOSE);应对依赖前一 K 线的缺陷,可以用跨周期引用来解决。不过此方法首先需要用通达信的“盘后数据下载”把数据补充完整(目前没有公式手段能检测数据完整,仅能依靠软件打开时的提示),然后定义两个公式,分别写上:
上一收盘价:REF(CLOSE, 1);昨收盘价:分时价格.上一收盘价#DAY;最终版本是这样:
最后一日:=DATE==CONST(DATE);
最先一日:=DATE==CONST(REF(DATE,TOTALBARSCOUNT-1));
日首根线:=DATE<>REF(DATE,1);
图中天数:=CONST(COUNT(日首根线, 0));
每日线数:=CONST(TOTALBARSCOUNT/图中天数);
当日线数:=BARSLAST(日首根线)+1;
当日进度:=当日线数/每日线数;
上一日期:=分时价格.上一日期#DAY;
当前日期:=分时价格.当前日期#DAY;
数据有效:=当前日期 - 上一日期 == 1;
全局最高:=CONST(HHV(H, 0));
全局最低:=CONST(LLV(L, 0));
全局中间:=CONST((全局最高+全局最低)/2);
昨收盘价:=
IF(最后一日, DYNAINFO(3),
IF(数据有效, 分时价格.上一收盘价#DAY,
IF(最先一日, DRAWNULL,
VALUEWHEN(DATE<>REF(DATE, 1), REF(C, 1)))));
DRAWTEXT(NOT(数据有效)
AND(最先一日 AND NOT(最后一日))
AND 当日进度 == 0.45, 全局中间, '日线数据不足'),COLORYELLOW;上一收盘价:REF(C, 1);
上一日期:REF(DATE,1);
当前日期:DATE;这里我加了一大段逻辑就是为了避免因为忘记下载 K 线数据,系统自动回退到更旧的有的数据上,造成的结果失真。
因为分时图取不到 1MIN 线的 OPEN 值,如果还需要稳定的当日开盘价数据,还是必须下载 K 线。所以两者都需要的情况,只用跨周期引用就足够了。
关闭 Powershell 的 Script Block Logging
今日检查 Windows 时间查看器时,注意到每次启动 Powershell 7 便会在 PowerShellCore/Operational 中留下几条日志:
信息 2026-02-12 18:42:51 PowerShellCore 40961 PowerShell Console Startup
信息 2026-02-12 18:42:51 PowerShellCore 40961 PowerShell Console Startup
信息 2026-02-12 18:42:51 PowerShellCore 53504 PowerShell Named Pipe IPC
信息 2026-02-12 18:42:51 PowerShellCore 53504 PowerShell Named Pipe IPC
信息 2026-02-12 18:42:51 PowerShellCore 40962 PowerShell Console Startup
信息 2026-02-12 18:42:51 PowerShellCore 40962 PowerShell Console Startup
信息 2026-02-12 18:42:52 PowerShellCore 40961 PowerShell Console Startup
信息 2026-02-12 18:42:52 PowerShellCore 53504 PowerShell Named Pipe IPC
信息 2026-02-12 18:42:52 PowerShellCore 40962 PowerShell Console Startup
警告 2026-02-12 18:42:52 PowerShellCore 4104 Execute a Remote Command大部分是记录:启动了一个 Session。比较让我在意的是代号为 4104 的 Execute a Remote Command 记录,内容是 PowerShell Profile 中的 ProfileAsync 脚本。另外执行 PSFzf.psm1 模块做 fzf 初始化也会产生几条。
查了下可以关闭
- https://github.com/PowerShell/PowerShell/blob/6b8d724b030d1ced7bf772c502279d694c72bf47/test/powershell/engine/Basic/GroupPolicySettings.Tests.ps1#L109
- https://github.com/PowerShell/PowerShell/blob/6b8d724b030d1ced7bf772c502279d694c72bf47/test/powershell/Host/Logging.Tests.ps1#L500
对于代码中含有 InvokeMember / OpenProcess 等调用的脚本,会触发到 HasSuspiciousContent 也会产生记录。
可以在组策略关闭,也可以靠注册表:
PowerShell7 的组策略需要单独安装 about_Group_Policy_Settings - PowerShell | Microsoft Learn
Windows 组件 | Windows PowerShell | 打开 PowerShell 脚本块日志记录配置项是旧版的。
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Policies\Microsoft\PowerShellCore]
[HKEY_CURRENT_USER\Software\Policies\Microsoft\PowerShellCore\ModuleLogging]
"EnableModuleLogging"=dword:00000000
[HKEY_CURRENT_USER\Software\Policies\Microsoft\PowerShellCore\ScriptBlockLogging]
"EnableScriptBlockLogging"=dword:00000000现在日志里就只有几条启动消息了,这几条不改代码还去不掉。