由于 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
我认为我并不完全了解您的具体用例,但这里有一种可能有帮助的方法。
不要让进程转储到stdout
和stderr
,而是将它们写入文件。或者,您可以使用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