如何在travis上启动和停止后台任务?

时间:2015-04-22 14:37:55

标签: shell travis-ci

我需要在travis上启动并重新启动自定义Web服务器。使用子shell(.travis.yml)开始在后台开始:

- if [ "$TEST_ADAPTER" = "HTTP" ]; then (vendor/bin/httpd.php start &); fi

要再次停止/终止该过程,我试图获取其PID然后将其杀死:

- if [ "$TEST_ADAPTER" = "HTTP" ]; then (vendor/bin/httpd.php start &) && SERVER_PID=$!; fi
- ...
- if [ "$TEST_ADAPTER" = "HTTP" ]; then kill -9 $SERVER_PID && ...; fi

但是,SERVER_PID为空。

在travis上获取后台进程的PID以便停止它的正确方法是什么(复杂化:不使用额外的shell脚本)?

2 个答案:

答案 0 :(得分:9)

这里回答的问题是@ xmonk的答案在功能方面是正确的,但需要一个外部shell脚本 - 反过来 - 需要使用临时文件来写pid值。

我刚刚发现travis-ci确实允许多行语句简化了整个过程。把它放在.travis.yml

- |
  if [ "$TEST_ADAPTER" = "HTTP" ]; then
    vendor/bin/httpd.php&
    SERVER_PID=$!
  fi

答案 1 :(得分:3)

以下内容应该有效:

if [ "$TEST_ADAPTER" = "HTTP" ]; then
    vendor/bin/httpd.php&
    SERVER_PID=$!
fi

命令周围的()创建一个子shell。 $!在您的示例中显示为空,因为程序在子shell中运行,但您的$!正在父shell上运行。