3

我有一个运行多个进程的开发堆栈:Web 服务器、自动测试、后台编译等。所有这些都是基本的命令行命令,例如node app.jsor lein midje :autotest

是否可以使用一个脚本在“后台”中运行所有这些进程并将它们的输出合并到一个标准输出中(即:在终端的屏幕上显示它)?

我发现(使用 &)的简单 bash 解决方案的问题之一是,在 Ctrl+C 上,后台进程显然保持活动状态,这是不可取的。

我尝试添加陷阱'kill $(jobs -pr)' SIGINT SIGTERM EXIT,但这似乎在 OS X 上不能可靠地工作 - 令人惊讶的是节点进程被杀死,但在脚本退出后 java 进程仍然存在(通过 Ctrl+C)。

我可以使用任何脚本语言。我更喜欢纯 bash 或 JS,但 Python 或 Ruby 也可以。

我还希望将 ANSI 转义着色保留在合并的输出中。

4

1 回答 1

2

您可能会使用multitail实用程序。它不仅允许您跟踪日志文件,还允许您输出任意 CLI 程序(lein run、、lein midje :autotest...)。

例子:

$ multitail --mergeall -cT ANSI -l "lein midje :autotest" -cT ANSI -l "lein ring server-headless"

Ctrl-C而不是杀死所有被跟踪的进程。

如果您是 OSX 用户,您可以multitail使用安装brew install multitail(假设您已经安装了 homebrew - 如果没有,请参阅http://mxcl.github.io/homebrew/

为了获得有关多尾配置的更多信息,您可以阅读man multitail. 在http://www.vanheusden.com/multitail/index.php也有使用示例

于 2013-06-21T06:38:19.880 回答