AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题

问题[gnu-screen](server)

Martin Hope
Rinkana
Asked: 2020-10-13 10:20:35 +0800 CST

CentOS 8上systemd守护进程内的屏幕

  • 1

所以我想在 systemd 服务中运行 screen,这样我就可以在进程运行时(在守护进程内部)发出命令。请参阅问题末尾的示例,了解我希望能够做什么。

我目前拥有的:
ExecStart=/usr/bin/java -someArguments -jar server.jar一个以-running 作为守护进程 启动的 java 应用程序,其中 user:group 设置为“server”:“server”,以及“ProtectSystem=full”和类似的强化参数。这运行良好,没有问题。

但是,我想要: 与上面相同,但它在屏幕实例中运行。像这样的东西:
ExecStart=/usr/bin/screen -DmS aServer /usr/bin/java -someArguments -jar server.jar

后者拒绝启动,输出journalctl -xe告诉我:“无法执行命令:权限被拒绝”。但是,如果我自己在终端中执行此操作(与 ExecStart 中的命令相同),我可以从同一用户(服务器:服务器)启动屏幕会话。

我在网上找到了一个解决方案,上面写着:
# Uncomment this to fix screen on RHEL 8
ExecStartPre=+/bin/sh -c 'chmod 777 /run/screen'

但我本能地不喜欢 777 部分,我也不明白为什么每次守护程序启动时都需要运行它。

我基本上要问的是:如何让屏幕在 systemd 守护进程中工作?上述解决方案是个好主意,还是有更好的方法?


我希望能够做的例子:

  1. 有一个 systemd 计时器,ExecStartPre=/screen -p 0 -S -X eval 'stuff "save-all"\\015'其序列中有一个(或类似的)。
  2. ExecStop 期间的一系列命令,如上面的命令。
  3. 当我手动连接到 Linux 服务器(连接到屏幕实例)时,能够与进程交互。
gnu-screen chmod daemon systemd centos8
  • 2 个回答
  • 857 Views
Martin Hope
alphamikevictor
Asked: 2017-03-24 04:42:03 +0800 CST

从屏幕会话中获取硬拷贝

  • 6

我在屏幕会话中启动了一项工作,预计将运行几个小时。有时我被要求检查工作是否仍在运行,并猜测工作的百分比。

猜测它是否工作就像执行 aps -fu $LOGNAME来检查进程是否还活着一样简单,但是为了猜测 % 我需要检查程序的输出(它输出一些可以用来grep -n查看的信息它当前正在处理哪一行文件)。

我可以附加会话 ( screen -R jobLoadItems) 并查看它,但我想这样做而不再次附加到会话。我已经检查过在屏幕会话中执行Ctrla-H激活屏幕日志,但它太冗长了,它会占用所有可用的磁盘空间。

那么有一种方法可以打印屏幕会话的最后几行而不附加它吗?(类似screen -S jobLoadItem -Q display last 50 lines)

gnu-screen
  • 1 个回答
  • 1345 Views
Martin Hope
ComputerLocus
Asked: 2017-03-17 05:59:14 +0800 CST

杀死屏幕会话并开始一个新的,cron

  • 0

我有一个屏幕会话,我运行了几个窗口,这些窗口正在运行几个在终端窗口中运行控制台的应用程序(这就是为什么我在屏幕中运行它们的原因)。

我想杀死所有的窗口,然后添加两个新的窗口,基本上只是重新运行命令以再次启动程序。

由于这可能有点令人困惑,如果我只是尝试在命令行上手动执行此操作,我会这样做:

$ screen -x programs

$ (Hit Control-a + \ )

$ (Hit Control-a + c)

$ program1 args0 args1 #running first program again

$ (Hit Control-a + c)

$ program2 args0 args1 #running second program

从技术上讲,我什至不需要杀死现有的窗口,只需停止交互式窗口的运行。通常我在窗口中执行此操作时,我只需按 CTRL-D 并且程序停止运行。然后我再次运行程序。

我知道有命令可以按名称附加到现有的屏幕会话,我只是不知道如何使用它来发送相当于 CTRL+D 的命令,然后向它发送另一个命令。

cron gnu-screen
  • 1 个回答
  • 732 Views
Martin Hope
Tom Tom
Asked: 2016-11-29 03:34:57 +0800 CST

在后台打开屏幕并启动一个进程

  • 2

我想做以下事情:重新启动后,我想启动一个屏幕,然后应该执行一个脚本。因此,我搜索了 crontab 和 screen,我也确实找到了一些答案。但是,没有什么对我有用。我正在运行一个安装了屏幕的 ubuntu linux,我想运行一个 python 脚本。

以下作品screen -d -m打开一个屏幕但不运行任何东西。相反,我想创建一个屏幕并启动一个脚本。从我在网上找到的答案告诉我这是由screen -d -m scriptname. 在我的情况下,脚本名称是 main.py(我检查了它是否可以执行)。

但是,screen -m -d /path/to/main.py不会创建屏幕。这是我的控制台输出

$ screen -d -m /opt/main.py
$ screen -x
There is no screen to be attached.

但是,这有效但不执行 python 脚本:

$ screen -d -m
$ screen -x

我在这里做错了什么?谢谢 :)

cron gnu-screen
  • 1 个回答
  • 890 Views
Martin Hope
Maróthy Zsolt
Asked: 2016-11-10 03:49:27 +0800 CST

如何在 Debian8 上获取 su 屏幕 PID?

  • 0


我想由另一个用户运行这个命令(所以使用 su):screen -ALmdS server_mta ./mta-server -n

没关系:su - server_2 -c 'screen -ALmdS server_mta ./mta-server -n

但是我需要屏幕的PID,但是当我尝试获取时,我得到了另一个PID。

我试过这个方法:

su - server_2 -c "screen -ALmdS server_mta ./mta-server -n >>~/outlog 2>&1 & echo \$! "

但它给出了 5996 PID,但是当我检查它ps ax |grep server_mta的结果是:

5997 ?        Ss     0:00 SCREEN -ALmdS server_mta ./mta-server -n
6023 pts/45   S+     0:00 grep server_mta


我试过这个命令:

su - server_2 -c 'screen -ALmdS server_mta ./mta-server -n > /dev/null & ps ax |grep  $! '

结果是:

6829 ?        R      0:00 screen -ALmdS server_mta ./mta-server -n
6831 ?        S      0:00 grep 6829

我以为我得到了 PID,当我再次检查时ps ax |grep server_mta,我得到了另一个 PID。这里的区别是屏幕是小写的,当我签ps ax |grep server_mta入时,这是大写的。



如何获得由另一个用户使用 su 运行的屏幕进程的 PID?

linux debian gnu-screen su pid
  • 1 个回答
  • 61 Views
Martin Hope
KittMedia
Asked: 2016-07-05 22:59:04 +0800 CST

使用“服务”命令初始化脚本无法正常工作

  • 1

我有以下启动脚本,它应该以分离模式启动或停止屏幕:

#!/bin/sh

# node2
# Maintainer: @KittBlog
# Authors: [email protected]

### BEGIN INIT INFO
# Provides:          node2
# Required-Start:    $local_fs $remote_fs $network $syslog
# Required-Stop:     $local_fs $remote_fs $network $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: node2 in screen detached mode
# Description:       node2 in screen detached mode
# chkconfig: - 85 14
### END INIT INFO
NODE_NAME=node2
SCREEN=$(which screen)
SCRIPT_PATH=/home/jail/

do_start() {
    if !($SCREEN -r | grep -o "[0-9]*\.$NODE_NAME"); then
        $SCREEN -S $NODE_NAME -d -m $SCRIPT_PATH/start-npm.sh
    fi
}

do_stop() {
    for session in $($SCREEN -r | grep -o "[0-9]*\.$NODE_NAME"); do
        $SCREEN -S "${session}" -X quit
    done
}

case "$1" in
    start|stop)
        do_$1
        ;;
    restart)
        do_stop
        do_start
        ;;
    *)
        echo "Usage: $0 {start|stop|restart|status}"
        exit 1
        ;;
esac
exit 0

如果我手动启动脚本或通过调用/etc/init.d/node2 {start|stop|restart}.

除了 if 子句被忽略之外, using 也可以service node2 start正常工作,因此即使已经有一个新屏幕,也总是会分离一个新屏幕。

问题是那service node2 stop行不通。我知道service在“可预测的环境”中运行脚本。这里有问题吗?我不能使用$SCREEN -r | grep -o "[0-9]*\.$NODE_NAME"来确定此环境中是否已经存在活动屏幕吗?

service gnu-screen upstart
  • 1 个回答
  • 462 Views
Martin Hope
kskaradzinski
Asked: 2015-06-11 12:49:28 +0800 CST

检查屏幕中的命令是否正在运行

  • 0

如何检查屏幕中运行的命令是否仍在运行或输出异常?所以我可以向用户报告。

我试图执行将数据插入mysql的命令,但我不时得到

[PDOException]
  SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock; try restarting transaction
gnu-screen
  • 1 个回答
  • 417 Views
Martin Hope
andersonbd1
Asked: 2014-11-20 06:05:56 +0800 CST

屏幕:如何在其他 2 个窗口之间移动一个窗口

  • 3

在屏幕中有没有办法在其他两个窗口之间放置一个窗口而不是交换?

这是我所拥有的

1 - I want this to become #2
2 - I want this to become #3
3 - I want this to become #1

如果我进入屏幕 #3 并输入命令“:number 1”,新订单是

1 - I want this to become #1
2 - I want this to become #3
3 - I want this to become #2

显然,再多一个命令,我就能得到我想要的。但是,当我有 15 个窗口时,这是一个很大的痛苦。

gnu-screen
  • 1 个回答
  • 137 Views
Martin Hope
Dale Mahalko
Asked: 2014-08-31 22:37:47 +0800 CST

screen 导致“tail -F | grep”回显不匹配的行

  • 7

这是 Ubuntu (3.13.0-29-generic #53),试图做一个简单的 bash 脚本来监控匹配行的日志文件。

如果我执行以下操作,则 bash shell 中除了匹配项之外没有输出,这是预期的:

尾-F server.log | grep --line-buffered "字" | tee -a wordwatch.log

但是,如果我尝试在屏幕上做同样的事情,会话就会被监视日志文件中不匹配的数据发送到垃圾邮件中。显然它显示了监视日志文件中的所有内容。此垃圾邮件不会出现在输出日志文件中。

screen -S "wordwatch" 尾 -F server.log | grep --line-buffered "字" | tee -a wordwatch.log

我做错了什么,如何阻止观看的日志向屏幕会话发送垃圾邮件?

gnu-screen
  • 1 个回答
  • 871 Views
Martin Hope
Programster
Asked: 2014-01-17 05:52:55 +0800 CST

Byobu - 如何断开与 lxc-console 的连接

  • 2

我在 ubuntu 12.04 上的 Byobu 内并进入了 lxc 控制台。不幸的是, lxc 的转义序列似乎是cntrl-a q. 然而,这与也使用cntrl-a序列的 Byobu 冲突。我尝试了 using这个问题的答案cntrl-a a q,但似乎cntrl-a a试图进入 byobu 中的下一个窗口!我还尝试使用 f9 更改转义序列,但它似乎被破坏了,因为它没有从cntrl-a. 除了从屏幕外杀死容器之外,还有什么解决方案?

gnu-screen
  • 2 个回答
  • 753 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve