Как мога да стартирам и спра фонова задача на travis?

Трябва да стартирам и рестартирам персонализиран уеб сървър на travis. Стартирането във фонов режим е добре с помощта на под-обвивка (.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 обаче е празен.

Кой е правилният начин за получаване на PID на фонов процес на travis, за да го спрете (усложнение: без използване на допълнителен shell скрипт)?


person andig    schedule 22.04.2015    source източник


Отговори (2)


Следното трябва да работи:

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

() около командата създава под-обвивка. $! е празен във вашите примери, защото програмата работи в под-обвивката, но вашият $! се изпълнява на родителската обвивка.

person xmonk    schedule 22.04.2015
comment
Доколкото знам, не мога да пиша изявления за множество права в travis.yml groups.google.com/forum/#!topic/travis-ci/uaAP9zEdiCg - person andig; 22.04.2015
comment
Добре, но можете да поставите горното в шел скрипт и да стартирате този скрипт от вашия .travis.yml файл. - person xmonk; 22.04.2015
comment
Можете да пишете многоредови изрази в Travis CI YAML, като използвате многоредовия оператор |, вижте: jeffgeerling.com/blog/2017/ - person geerlingguy; 11.04.2018

Отговорът на въпрос тук като отговор на @xmonk е правилен по отношение на функционалността, но изисква външен скрипт на обвивката, който от своя страна ще трябва да използва временен файл, за да запише стойността на pid.

Току-що разбрах, че travis-ci всъщност позволява многоредови изрази, което опростява всичко. Поставете това в .travis.yml:

- |
  if [ "$TEST_ADAPTER" = "HTTP" ]; then
    vendor/bin/httpd.php&
    SERVER_PID=$!
  fi
person andig    schedule 23.04.2015
comment
След това можете да използвате - kill $SERVER_PID в отделна стъпка. Променливата $SERVER_PID ще бъде запазена през стъпките. - person Mr-IDE; 02.10.2018