我有一个运行多个进程的开发堆栈:Web服务器,自动测试,后台编译等。所有这些都是基本的命令行命令,例如node app.js
或lein midje :autotest
。
是否可以使用一个脚本在“后台”中运行所有这些进程,并且将其输出合并为一个标准(即:在终端屏幕上显示它)?
我发现(使用&)简易bash解决方案的一个问题是,在Ctrl + C上,后台进程显然保持活着,这是不可取的。
我尝试添加陷阱'kill $(jobs -pr)' SIGINT SIGTERM EXIT
,但这似乎在OS X上无法可靠地工作 - 令人惊讶的是节点进程被杀死了,但java脚本退出后仍然存在(通过Ctrl + C)
我可以使用任何脚本语言。我更喜欢纯粹的bash或JS,但Python或Ruby也可以。
我还希望在合并输出中保留ANSI转义着色。
答案 0 :(得分: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
(假设您已经安装了自制程序 - 如果没有,请参阅http://mxcl.github.io/homebrew/)
为了获得有关多指配置的更多信息,您可以阅读man multitail
。 http://www.vanheusden.com/multitail/index.php