【发布时间】: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