使用脚本控制屏幕上已运行的进程

使用脚本控制屏幕上已运行的进程

由于 Gnu Screen 很难在 Google 上搜索到,我一直很难找到这个问题的答案。

举一个具体的(你想做什么)例子:
运行一个服务器进程(在 Linux 下)会启动一堆输出(STDOUT STDERR),这些输出可以从 STDIN 获取输入。
我想定期发出命令(/snapshot)来备份当前状态。
我想设置 cron 来运行一个命令,偶尔将其注入到服务器的 STDIN 中。

到目前为止,我一直在想,服务器进程可以在一个独立的屏幕会话中运行。我认为屏幕的 exec 命令可以连接到屏幕下的不同终端会话,并将 STDIN 和 STDOUT 交给另一个进程。但是阅读文档一直很令人困惑。他们说有一个“令人困惑的插图”来进一步解释这一点,但这也无济于事。

如果有人做过这个,我该如何指定一个 cron 命令来完成这个任务。到目前为止,我在想(展示你做了什么):

5 * * * * /usr/bin/screen -p 1 -X 'exec ! echo "/snapshot"'

但在这里我不知道这是否会起作用,这是否实际上会针对窗口 1 中的服务器进程,以及之后会发生什么;屏幕是否退出?

答案1

我认为我并不完全了解您的具体用例,但这里有一种可能有帮助的方法。

不要让进程转储到stdoutstderr,而是将它们写入文件。或者,您可以使用tee写入文件和终端。

还可以stdin使用tail -f单独的输入文件进行重定向。创建一个 cron 作业,以适当的时间间隔将新行写入输入文件。

screen如果您想定期检查您的进程(或者只是让它保持活动状态),您仍然可以运行它。

启动你的流程如下:

tail -f /path/to/myinputfile.txt | myprocess 2&>1 >/path/to/outputfile.txt

或者使用tee

tail -f /path/to/myinputfile.txt | myprocess 2&>1 | tee /path/to/outputfile.txt

并设置输入 cron 作业如下:

5 * * * * /bin/cat "/snapshot" >> /path/to/myinputfile.txt

相关内容