2016-06-20 4 views
1

Я выполняю команду pkill на оболочке linux через Jenkins. Эта команда всегда сбой сборки, когда процесс не существует.Выполнение «pkill» в оболочке через Jenkins - сбой сборки

sudo docker exec mycontainer sh -c 'pkill -f processToKill || true ' 

Почему? Как я могу добиться успеха, даже когда pkill терпит неудачу?

+1

Я подозреваю, что внешняя команда возвращает ненулевое значение, поэтому переместите '|| true': 'sudo docker exec mycontainer sh -c 'pkill -f processToKill' || true' – bishop

+0

Нет, это не так. docker exec возвращает все возвращаемые вложенные сценарии. Я могу проверить это, сделав некоторое эхо вместо pkill. – Skip

+0

Чтобы это произошло даже с '|| правда ... удивительно. **Очень неожиданно. Подозреваемый - это нечто удивительное. –

ответ

4

Вы губите сами - || true часть никогда не будет достигнута:

$ sh -c 'pkill -f processToKill || true' ; echo $? 
Terminated 
143 

Причиной является -f флаг, который вы предоставляете pkill. От: страница руководства

-f, --full 
      The pattern is normally only matched against the process name. 
      When -f is set, the full command line is used. 

Вы должны улучшить выбор процесса для вашего pkill заявления, поэтому он не будет ловить командную строку, которую вы передаете в sh.