【发布时间】:2015-06-08 11:34:24
【问题描述】:
系统:
- 用 Java (Play Framework 2.3.x) 编写的后端应用程序(RESTful HTTP API)
- 用 Javascript 编写的前端应用程序(GUI,使用 API)(带有 grunt 的 angularjs 用于构建)
- Travis CI 用于持续集成
问题:
我想启动/运行后端应用程序,在它成功启动后,我想用量角器测试它(通过 grunt 任务)。
但是启动后端应用程序不会继续,因为它不是结束进程(服务器正在运行 -> 未结束)
通过添加&将服务器作为后端进程启动可以解决问题,但不能保证服务器同时启动。
网上的一些建议说:
添加 sleep(x) 并在此之后运行测试
但是 x 是多少?
是否有其他方法可以做到这一点,而不是猜测(或测量)启动服务器的时间并在将服务器作为后台进程启动后进入睡眠状态?
编辑: 启动服务器的输出(例如周期性比较后台任务的输出)是这样的:
$ activator run
[info] Loading project definition from ...
[info] Set current project to ... (in build file:...)
--- (Running the application, auto-reloading is enabled) ---
[info] play - Listening for HTTP on /0:0:0:0:0:0:0:0:9000
(Server started, use Ctrl+D to stop and go back to the console...)
【问题讨论】:
-
如果启动服务器的进程启动一个单独的进程并完成,那么您可以使用
wait。否则,您可以使用基于读取输出的方法(例如,等到打印特定消息)。 -
@TomFenech 是的,第二种方法是我最初的想法。你有一个例子吗?我想这可能是一个可以接受的答案。
-
为此,我们需要查看启动过程的输出样本,指出哪个部分应该表明服务器已成功启动。
-
@TomFenech 我用输出更新了问题,我认为可以将输出与“服务器启动,使用 Ctrl+D 停止并返回控制台...)”进行比较好的
-
使用“nohup”命令怎么样?