Я запускаю безголовый селен-процесс на сервере 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).