Jenkins에서 작동하지 않는 자유형 쉘 스크립트의 트랩

Jenkins에서 작동하지 않는 자유형 쉘 스크립트의 트랩

나는 원한다우아한누군가가 작업을 중단하면 Jenkins 작업이 종료되므로 중단 신호를 포착하고 쉘 스크립트를 사용하여 종료 단계를 사용자 정의하려고 했습니다. 하지만 Jenkins는 모든 함정을 무시하고 어쨌든 테스트할 샘플 스크립트를
강제로 죽이는 것 같습니다.

exit_script() {
    echo "Printing something special!"
    echo "traped &  killed " >>text.txt
    echo "Maybe executing other commands!"
    trap - INT TERM ABRT  QUIT HUP # clear the trap
    kill -- -$$ # Sends SIGTERM to child/sub processes
}

trap 'exit_script' INT KILL ABRT QUIT HUP

echo "pid is $$"
echo "pid is $$" > test.txt
count=0
sleep 10
echo 1
echo 1 >>test.txt
sleep 10
echo 2
echo 2 >>test.txt
sleep 10
echo 3
echo 3 >>test.txt
sleep 10
echo 4
echo 4 >>test.txt
sleep 10
echo 5
echo 5 >>test.txt
sleep 10
echo 6
echo 6 >>test.txt
exit 0

나는 우리가 어떻게 덫을 놓을 수 있는지 찾고 있어요SIGTERM젠킨스에서 신호를 보내고 kill 명령을 사용자 정의합니다.

참고: 이 스크립트는 내 시스템 bash에서 잘 작동합니다. INT->SIGINT 등을 변경하면 됩니다.

답변1

나는 그것이 잘 작동한다고 생각합니다. 단지 몇 가지 수정이 필요한 경우에만 트랩과 관련된 기능에 문제가 있으면 exit_script()작동하지 않을 것입니다.

제거하여 테스트했는데 kill -- -$$함수가 호출되고 프로세스가 계속 실행되어 제대로 작동합니다.

답변2

일반적으로 쉘 스크립트에서는 다음과 같이 SIGTERM 신호를 트랩합니다.

trap 'exit_script' TERM

PS Trapping KILL이 작동하지 않으며 QUIT를 두 번 나열해도 도움이 되지 않습니다.

관련 정보