我的 .screenrc 中有这个
caption always "%{= Kw} [%0c] %-Lw%{= KW}[%50>%n%f* %t]%{= Kw}%+Lw%=| %l | ${FULLHOST}"
Run Code Online (Sandbox Code Playgroud)
它通常显示如下内容:
[01:06] 0$ vim 1$ top 2-$ tail [3$* ~] | 0.26 0.54 0.36 | machine.domain.com
Run Code Online (Sandbox Code Playgroud)
但是,当我打开很多窗口时,右侧的数据会被推离边缘并被截断:
[01:07] 0$ vim 1$ top 2$ tail 3$ ~ 4$ ~ 5$ ~ 6-$ ~ [7$* ~] | 0.21 0.46 0.34 | mac
Run Code Online (Sandbox Code Playgroud)
如何更改标题命令,以便在必要时截断窗口列表,而不是将正确的信息从边缘推送出去?如果活动窗口也总是显示,则奖励积分。
我使用屏幕,有时我不得不分享它。如何管理与屏幕的活动连接?
我想监控连接和连接的用户,他们在哪里以及他们做什么。我也希望能够把他们踢出去。
这可能吗?
谢谢。
我的 Ubuntu 笔记本电脑上有一个工作环境,我想在其中使用三个不同的屏幕。
例如。在终端,我通常写
screen -S mywork
run_server_1
Run Code Online (Sandbox Code Playgroud)
然后,ctrl-a c 创建第二个屏幕
run_server_2
Run Code Online (Sandbox Code Playgroud)
等等。
我想编写一个脚本来自动设置此环境,但是如何从一个脚本控制多个屏幕?
更新:我真的希望能够从 shell 脚本而不是屏幕配置中做到这一点。文件。有没有办法做到这一点?
所以,如果我这样做:
su -c 'screen -dmS screenname script to run' - user to run as
Run Code Online (Sandbox Code Playgroud)
它不会工作。如果从 root 执行 screen 命令正在工作,所以那里没有问题。
如果我做:
su - user
screen
Run Code Online (Sandbox Code Playgroud)
我得到:
Cannot open your terminal '/dev/pts/0' - please check.
Run Code Online (Sandbox Code Playgroud)
怎么了?
编辑:我一直在四处寻找,似乎找不到解决这个问题的任何好办法。
我会做下一个最好的事情:以 root 身份运行屏幕。
当我需要在低重要性服务器上启动后台进程时,我倾向于使用 nohup:
nohup ./server.sh &
Run Code Online (Sandbox Code Playgroud)
大多数同事似乎更喜欢屏幕:
screen -D -R mydaemon
./mydaemon.sh
^A ^D
Run Code Online (Sandbox Code Playgroud)
这两种方法的效果有什么主要区别吗?以一种方式或另一种方式有什么好处?
我可以使用 screen 或 tmux 连接到其他终端会话,或共享它们。但是只有当我们第一次知道我们会使用它们时,这项工作才有效。
由于 root 可以访问所有内容,有没有办法在不运行 screen 的情况下做同样的事情?一些管道通过三通左右。
例如,远程接管某人打开的控制台或 ssh 会话。允许看到正在发生的事情并正确关闭事物。
当我screen在我的电脑上使用并分离时,我被带回命令提示符,一切都很好。但是,如果我通过 SSH 远程连接到我的计算机并使用屏幕,当我尝试分离时,我会收到错误Utmp slot not found -> not removed.
然后它挂起,我什至不能ctrl-c,ctrl-d不得不关闭 Cygwin 窗口。为什么会发生这种情况,我该如何解决?
请注意通过 SSH 退出您的计算机然后返回来重新创建错误:
$ screen
(C-a d)
$ ssh -R12345:localhost:22 username@someServer
$ ssh -p12345 username@127.0.0.1
$ screen -r
(C-a d)
Run Code Online (Sandbox Code Playgroud) 这是 Ubuntu (3.13.0-29-generic #53),尝试做一个简单的 bash 脚本来监控匹配行的日志文件。
如果我执行以下操作,则 bash shell 中除了匹配项之外没有任何输出,这是预期的:
tail -F server.log | grep --line-buffered "word" | tee -a wordwatch.log
但是如果我尝试在屏幕上做同样的事情,会话就会收到来自监视日志文件的不匹配数据的垃圾邮件。显然,它显示了监视日志文件中的所有内容。此垃圾邮件不会出现在输出日志文件中。
screen -S "wordwatch" tail -F server.log | grep --line-buffered "word" | tee -a wordwatch.log
我做错了什么,如何阻止监视的日志向屏幕会话发送垃圾邮件?
我在屏幕会话中启动了一项作业,预计将运行几个小时。有时我会被要求检查工作是否仍在运行并猜测工作的百分比。
猜测它是否正常工作就像执行 aps -fu $LOGNAME来检查进程是否还活着一样简单,但是为了猜测 % 我需要检查程序的输出(它输出一些可以用于grep -n查看的信息)它当前正在处理的文件行)。
我可以附加会话 ( screen -R jobLoadItems) 并查看它,但我想在不再次附加到会话的情况下执行此操作。我已经检查过在屏幕会话中执行Ctrla-H激活屏幕日志,但它是如此冗长,它将占用所有可用磁盘空间。
那么有没有办法只打印屏幕会话的最后几行而不附加到它?(类似的东西screen -S jobLoadItem -Q display last 50 lines)
这里已经有很多这样的问题,但每个人都推荐(一种变体)以下解决方案:
screen -dmS somename bash -c "/path/to/script; bash -l"
Run Code Online (Sandbox Code Playgroud)
例如,当script结束时,运行一个新的bash.
不幸的是,这对我不起作用,因为
script$BASHPID 变量用于某事script运行始终运行,如需要使用CTRL-C终止它script(相同$BASHPID)所以,问题是:
screen在分离模式下启动(例如在启动时) - 通常这是由-dm.profile,但这是可以与克服source ~/.profile的script自身script启动一些其他的(二进制)程序究竟会持续至CTRL-Cscript我必须得到相同的bash(相同的$BASHPID(因为需要运行另一个脚本取决于它)总之需要模拟如下交互工作:
screenecho $BASHPID/path/to/script经过以上,以后,我可以做
screen -ARR) …