【问题标题】:Quitting SCREEN session does not end running programs退出 SCREEN 会话不会结束正在运行的程序
【发布时间】:2015-03-17 23:27:26
【问题描述】:

我有一个简单的脚本,它试图终止正在运行的屏幕会话,等待 5 秒,然后重新启动它。试图把它放在一个 cron 工作中,但是有一个奇怪的问题。这是脚本:

#!/bin/bash
screen -S test -X quit
sleep 5
screen -dmS text node test.js

所以当你第一次运行它时,你会得到一个“没有名为测试的会话”的错误......这很好。然后它以分离模式启动会话并运行节点脚本。

脚本下次运行时,它会找到会话,发出退出命令,如果您运行“screen -ls”,则不会列出会话。

但是程序仍在运行...但是,如果您随后打开浏览器并点击该站点,则该进程将终止,并且您会收到服务不再运行的错误...因此网络服务器在之后保持运行会话已退出,只有在您尝试通过网络浏览器访问时才会终止。

我正在 Max OSX 10.9.5 (Mavericks) 上测试所有这些

我是 screen 新手,我之所以这样使用它,是因为我需要能够连接到远程服务器并通过控制台监视/管理脚本。

我尝试了以下方法向屏幕会话发出 Ctrl-C 命令以退出程序,但没有成功:

screen -S text -X stuff "^C"

我需要能够确保节点脚本在会话结束时退出运行。任何方向将不胜感激。谢谢!

【问题讨论】:

  • 为什么要杀死并重新启动屏幕会话?为什么不直接杀死并重新启动 node.js?
  • 通过在某处保存$!来找出屏幕的进程ID,然后只需kill <PID here>。这是一个选择吗? - 如果可以接受杀戮,我可以为您提供脚本。

标签: node.js bash gnu-screen


【解决方案1】:

所以原来的脚本在服务器(CentOS 6)上工作得很好。我确实使用了您的建议来终止进程并重新启动它,但是客户端需要终止会话(无论出于何种原因在这里插入......)谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-23
    • 2022-01-18
    • 1970-01-01
    • 2013-05-10
    • 1970-01-01
    相关资源
    最近更新 更多