Bash管道输出和程序输入

时间:2011-03-27 12:35:56

标签: bash pipe

我在一个分离的屏幕会话中在我的linux机器上运行一个minecraft服务器。我不是非常喜欢屏幕,并且希望能够不断地将服务器的输出传输到文件(如管道)并将一些输入从文件传输到服务器(这样我就可以输入和输出从远程程序到服务器,如python脚本)。我对bash不是很有经验,所以有人可以告诉我怎么做吗?

谢谢,NikitaUtiu。

1 个答案:

答案 0 :(得分:2)

目前尚不清楚你是否需要屏幕。我不知道Minecraft服务器,但通常对于服务器软件,您可以从crontab条目运行它并将输出重定向到日志文件。

假设你的服务器在周日晚上的午夜自杀,(我们可以讨论如果每周重新启动1次太少或太多,或者你需要特别重启),那么就改变这个问题,但是对于要做什么的基本想法,这里是一个crontab条目,它在每个星期一午夜后的1分钟启动服务器。

01 00 * * 1 dtTm=`/bin/date +\%Y\%m\%d.\%H\%M\%S`; export dtTm; {  /usr/bin/mineserver -o ..... your_options_to_run_mineserver_here ... ; } > /tmp/mineserver_trace_log.${dtTm} 2>&1

请参阅crontab的手册页以确认星期几范围是0-6(0 =星期日),如果0!=星期日,则更改星期值。

通常我会破坏代码以便更容易阅读,但对于crontab条目,每个条目必须全部在一行上(有一些奇怪的例外)并且通常限制为1024b-8K到多长时间行可以。注意';'就在结束之前'}'是超级关键的。如果遗漏了这些内容,您将收到无法解码的错误消息,或者根本没有错误消息。

基本上,您将任何输出重定向到文件(包括std-err输出)。现在你可以使用输出执行很多操作,使用moreless查看文件,grep ERR $ {logFile},编写grep错误消息的脚本,然后向您发送电子邮件已发现错误等等。

您可能需要一些sys-admin工作来获取mineserver用户,以便它可以运行crontab条目。此外,如果您不习惯使用vi或emacs编辑器,则创建crontab文件可能需要其他人的帮助。发布到superuser.com以获得有关linux管理问题的问题的答案。

最后,关于日期日志文件,我想提出两点。

  1. 好:a。如果你的应用程序死了,你永远不必重新运行它然后捕获输出并找出为什么某些东西停止工作。对于长时间运行的程序,这可以为您节省大量时间。湾保持过时的文件让你能够向你,你的老板,其他人证明以前工作得很好,看这里是日志文件。 C。保留日志文件(假设其中包含有用信息),您可以挖掘这些文件以获取事实。 I.E. :程序过去需要1秒进行处理,现在需要1小时等等。

  2. 坏:a。你需要设置一个机制来扫描旧的日志文件,否则在某些时候一切都会停止,当你最终弄清楚问题是什么时,你会发现你的/ tmp或你选择使用的任何目录完全是充分。

  3. 有一个自我维护的解决方案,可以在日志文件上使用日期,如果您发现此方法有用,我可以告诉您。这将需要一些解释,所以如果你没有发现crontab解决方案有用,我不想花时间写它。

    我希望这有帮助!