我广泛依赖 screen 进行开发和服务器管理。在服务器重新启动的罕见情况下,我必须手动重建屏幕会话,并且我知道.screenrc
自动启动屏幕会话的方法,但我从未能够让它工作。我尝试使用非常简单的命令进行测试,这些命令有效,但它们在单个屏幕会话中创建了两个相同的窗口。更复杂的命令 - 我实际上需要 - 导致屏幕终止。
我在 Ubuntu 20.04.2 服务器上,Screen version 4.08.00 (GNU) 05-Feb-20
我的.screenrc
文件很简单,是一个修改版本这个答案。
# don't display the copyright page
startup_message off
# increase scrollback buffer size
defscrollback 10000
# create windows
screen -t test1 ls $HOME/
然而,当我source .screenrc
甚至只是screen
在终端中输入时,我会得到以下输出,这表明我的屏幕版本不知道我要求它做什么:
~$ source .screenrc
startup_message: command not found
defscrollback: command not found
[screen is terminating]
当我使用 screen 时,我每次都会手动将其设置为执行以下任务:
- 在journalctl中跟踪特定服务
- 在虚拟环境中打开Python的IDLE
- tail 特定目录中的日志文件
- 运行
docker exec
命令以在容器中打开 shell
当我修改.screenrc
为使用以下 .screenrc 条目来尾随特定服务文件时...
screen -t journalctl journalctl -u my-service-name.service -b -n 100 -f
Screen 将运行,但它会在 screen 会话中创建两个窗口,这两个窗口都运行上面的journalctl 命令。
我在设置上述任务时遇到的其他问题:
尝试在屏幕内激活我的 python 虚拟环境时出现错误消息:
screenrc中的命令是:
screen -t python3 . $HOME/my-project-dir/venv/bin/activate
屏幕上的错误是:
Cannot exec '.': Permission denied
尝试让 screen 运行该
docker exec
命令只会导致 screen 终止且没有输出。