Назад | Перейти на главную страницу

runit не убивает процесс при sv stop или sv reload

Я запускаю безголовый селен-процесс на сервере jenkins в AMI linux box, которым управляет runit.

проблема в том, что при вводе «sv stop selenium» или «sv reload selenium» старый экземпляр не прерывается и не уничтожается в его дочерних процессах, а просто отсоединяется от процесса runit, поэтому они продолжают работать, не зная о них runit, в результате в случае неудачной попытки перезапуска службы.

Я думаю, что мой вопрос как бы связан с этим: Как написать собственный сценарий остановки runit

значение: я, вероятно, должен попробовать собственный сценарий управления d, чтобы вручную очистить.

Я последовал этой идее: https://stackoverflow.com/questions/392022/best-way-to-kill-all-child-processes

Однако установка pid из / etc / sv / selenium / supervise / pid и пересылка его в цикл не дала никакой разницы.

Любой совет?

sv запустить скрипт:

#!/bin/sh

exec 2>&1
exec chpst -u jenkins -U jenkins /usr/bin/xvfb-run \
--server-args="-screen 0 1024x768x32" \
/usr/bin/java -jar /usr/local/bin/selenium-server-standalone-2.42.1.jar \
-ensureCleanSession \
-browserSessionReuse

Если вы добавите -P в командную строку chpst, chpst создаст новую группу процессов для вашей службы. Затем в вашем собственном сценарии 'd' вы можете прочитать pid и kill -TERM -pid, чтобы отправить сигнал TERM всей группе процессов.

Это должно работать до тех пор, пока ни один дочерний процесс не создает свою собственную группу процессов.

Однако было бы проще запустить xvfb и java отдельно (разделить их на две службы runit).