gpt4 book ai didi

daemon - 我如何编写 GNU Screen 脚本以从其中运行的程序开始,以便它不会在程序完成时退出 session ?

转载 作者:行者123 更新时间:2023-12-03 10:59:48 24 4
gpt4 key购买 nike

我如何编写 GNU Screen 脚本以从其中运行的程序开始,以便在程序完成时它不会退出 session ?

我想将交互式程序作为守护程序运行,如果我手动启动 screen 然后在其中启动这个程序,一切都按我想要的方式工作。如果程序退出或崩溃,屏幕 session 仍然存在,我可以去看看刚刚发生了什么。但是,如果我通过简单的屏幕启动启动程序,那么它确实在屏幕内运行,但是当程序退出时,屏幕 session 结束并且程序的任何输出都将丢失。

所以screen –dmS serverName serverApplication不适用于我的场景。我确实考虑过制作一个脚本来启动我想运行的程序然后永远休眠,然后我可以在屏幕的同时启动脚本并且应该得到我想要的效果,但这似乎是一种不整洁的做事方式我相信一定有更优雅的东西。

我已经阅读了很多屏幕教程并浏览了手册页,但没有什么是正确的方法。我确实尝试过 –X 但那是用于屏幕命令,而不是用于在屏幕 session 中运行命令......任何建议将不胜感激;如果有更好的工具用于脚本编写,我什至很乐意使用 GNU Screen 以外的其他工具,但请尽可能给我一个示例。

(旁注:我将使用它运行的两件事是 minecraft_server 和 mythtv_backend。我的计划是通过一些 ruby​​/bash 脚本在启动时从 chron 作业中启动它们)

最佳答案

首先,您需要启动一个仅运行默认 shell 的守护进程屏幕 session :

$ screen -dmS "serverName"

然后,使用 screen 的 stuff 将您的命令发送到该 shell。结合 -X :
$ screen -S "serverName" -p 0 -X stuff "serverApplication$(printf \\r)"
-p对于告诉 screen 在该 session 中的哪个窗口中填充命令很重要。在这种情况下,它是唯一可用的窗口 0,但如果您不指定它,由于某些奇怪的原因,您的命令将无处可去。 $(printf \\r)发送“返回”键击。普通 \n可能会在它的位置工作,但是 I've read那是依赖于 shell 的。换行符在 bash 中不起作用;我可以保证。

这是另一个很酷的技巧。如果您想在该 session 中创建另一个屏幕窗口,您可以:
$ screen -S "serverName" -X screen

现在您可以使用与上述相同的语法向那个发送命令,但使用 -p 1 .超有趣。

关于daemon - 我如何编写 GNU Screen 脚本以从其中运行的程序开始,以便它不会在程序完成时退出 session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6534386/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com