Как я могу запускать и останавливать фоновую задачу на 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, чтобы остановить его (сложность: без использования дополнительного сценария оболочки)?


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