2016-06-20 2 views
1

저는 Jenkins를 통해 Linux 쉘에서 pkill 명령을 실행하고 있습니다. 이 명령은 프로세스가 존재하지 않을 때 항상 빌드에 실패합니다.Jenkins를 통해 쉘에서 "pkill"을 실행하면 빌드가 실패합니다.

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

왜? pkill이 실패하더라도 어떻게 성공시킬 수 있습니까?

+1

외부 명령이 0이 아닌 것으로 의심되므로'|| true' :'sudo 도커 exec mycontainer sh -c 'pkill -f processToKill'|| 사실 ' – bishop

+0

아니, 그렇지 않습니다. docker exec는 중첩 된 스크립트에서 반환하는 값을 반환합니다. 나는 pkill 대신 에코를 사용하여 이것을 확인할 수있다. – Skip

+0

이것이'|| 사실 "은 놀랍다. **매우 놀라운. 용의자 - 익명화 - 관련 - 무언가 적절한 - 은폐 수준이 놀라운 것입니다. –

답변

4

당신은 자신을 죽이고있어 - || true 부분에 도달되지 않습니다 :

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

이유는 당신이 pkill에 제공하는 -f 플래그입니다. 맨 페이지에서 :

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

당신은 당신의 pkill에 문에 대한 프로세스 선택을 향상시킬 필요가, 그래서 당신이 sh에 전달할 명령 줄을 잡을 수 없습니다.

관련 문제