通过 ssh 重新启动分离屏幕中的进程

通过 ssh 重新启动分离屏幕中的进程

我有一台服务器上运行着多个屏幕,每个屏幕都有自己的节点服务器列表到不同的端口。我想创建 Jenkins 作业来 ssh 进入框,重新连接特定屏幕,停止进程,从 git 中提取,重新启动应用程序,然后分离屏幕。你能把 Ctrl+C 塞进屏幕吗?考虑一下:

ssh myuser@myserver "screen -S 1234.myscreen -X stuff '[[Ctrl+C]] && git pull origin master && npm install && node app' [[Detach screen]]"

答案1

Ctrl+C 发送 SIGINT。因此,如果您可以确定要发送信号的进程的 PID,则可以kill -INT pid在 之前执行此操作git pull,或者killall -INT processname如果您想停止所有进程(假设您的killall行为不像 )killall5

至于编写分离屏幕会话的脚本,我不知道。也许其他人可以帮你。

编辑:我刚刚想到你不需要编写分离脚本或对屏幕执行任何操作。只需在屏幕内执行如下操作:

while sleep 1; do
    ./some_program      # which saves its PID to a pidfile
    git pull
done

然后你就可以通过 ssh 从外部屏幕执行此操作:

kill -INT $(cat pidfile)

如果您的进程没有保存 pidfile,您可以尝试使用 start-stop-daemon 来执行此操作:

start-stop-daemon --start --exec ./some_program --pidfile pidfile --make-pidfile

答案2

Ctrl+C 序列必须作为文字 ^C 字符输入:(
Ctrl+V允许插入文字字符),然后Ctrl+C

当使用该stuff命令时,screen 不会以交互方式附加会话,因此无需分离。但是,您可能需要在最后一个命令后输入回车符,输入内容如下:
Ctrl+V Ctrl+M

相关内容