如何从入口点 shell 脚本启动屏幕会话并使其持续存在?

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

我正在 docker 中的 entrypoint shell 脚本启动一个 screen 会话,然后将

screen -list
的输出记录到文件中。

#!/bin/sh

screen -S my_screen -dm bash -c 'cd project && npm run start'

screen -list > scr_list.log

然后我连接docker容器并查看输出的日志。

here is a screen on: 
        14.my_screen      (12/18/24 17:55:29)     (Detached) 
1 Socket in /run/screen/S-root.

但是当我连接后手动运行

screen -list
时,它输出:

No Sockets found in /run/screen/S-root.

使用同一用户(whoami):

root

任何想法,可能是什么问题?

bash docker shell initialization
1个回答
0
投票

为了确保 screen 会话在 Docker 容器中持续存在,您需要确保 screen 会话已正确初始化并维护必要的环境。您当前的脚本几乎是正确的,但您可能需要调整屏幕会话的创建方式并确保屏幕套接字目录可访问。

这是脚本的改进版本:

#!/bin/sh

为屏幕套接字创建目录

mkdir -p /运行/屏幕

以分离模式启动屏幕会话

screen -S my_screen -dm bash -c 'cd /path/to/project && npm run start'

记录当前屏幕会话

屏幕-列表> /path/to/scr_list.log

确保将 /path/to/project 和 /path/to/scr_list.log 替换为容器中的实际路径。此外,请确保 Docker 容器的运行方式不会限制对 /run/screen 目录的访问。

运行此脚本后,您应该能够使用 screen -r my_screen 连接到 screen 会话并查看预期的输出。如果仍然遇到问题,请检查屏幕套接字目录的权限,并确保 Docker 容器在脚本运行后不会立即退出。

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