![如何在 Docker 容器中生成用户屏幕?](https://linux22.com/image/221055/%E5%A6%82%E4%BD%95%E5%9C%A8%20Docker%20%E5%AE%B9%E5%99%A8%E4%B8%AD%E7%94%9F%E6%88%90%E7%94%A8%E6%88%B7%E5%B1%8F%E5%B9%95%EF%BC%9F.png)
运行vdir:UNIX初始化方案有服务监督fromrunit
是一个很好的工具,可以在某些服务死掉时重新运行它。它监视目录的更改,inotify
例如。它永远执行目录中的脚本。
我有这样的结构:
$ tree app
app
├── service
│ ├── run
│ └── supervise
├── replay
│ ├── run
│ └── supervise
└── run
├── run
└── supervise
我想做的是这样的事情,基于这在app/run/run
和app/replay/run
(我尝试了链接中的解决方案,但失败了):
su - user -c screen -S run<<EOF
[...]
# code
EOF
代码必须阻塞/等待以避免runsvdir
在 // 中运行多个实例。
该代码在容器中以 root 身份运行docker
。不在systemd
这里。
我测试了许多我想避免的解决方案,其中多个进程的 pid 已失效。我错过了一些可能显而易见的事情。
任何想法?
- debian 11 直到下周;)
- 鲁尼特 2.1.2-41
注释/编辑:不强制从 . 创建运行/重播init
。它可以是 shell 脚本 (bash)。必须screen
只运行一次。
答案1
之后修复如下docker build .
:
docker exec -d -u mevatlave cont screen -d -m -S run ./run
docker exec -d -u mevatlave cont screen -d -m -S replay ./replay.sh
docker exec -it -u mevatlave cont screen -x run