내가 하고 있는 일은,
trap 'rm -f /path/of/file/fileName.running; echo "TRAPPED & READY";' 1 2 9 15 >> trap.log
로그에 아무 것도 수신되지 않고, 삭제해야 할 파일이 여전히 거기에 있습니다. 스크립트가 사용 중인 서버를 종료하기 때문에 스크립트가 실행되는 동안 어떤 신호가 스크립트를 중지하는지 잘 모르겠습니다.
참고: 이 파일이 있으면 내 크론 예약 작업이 실행되지 않으며 가능한 신호가 누락된 것 같지 않습니다. 내가 어디서 잘못됐나요?
답변1
문제의 일부는 arg 명령의 (참조된) 외부가 있으므로 >> trap.log
파일에서 얻는 것은 아무것도 추가하지 않는 trap.log
명령 자체의 출력뿐입니다 . trap
스크립트가 종료될 때 "TRAPPED & READY"라고 말하는 것이 무슨 뜻인지 잘 모르겠지만, 그런 뜻인 것 같습니다.
트랩 'rm -f파일 이름;에코"정보" >> 트랩.로그'신호 사양…
나는 Karlo의 의견에 동의합니다. "스크립트가 사용 중인 서버를 종료"하면 스크립트가 종료될 가능성이 가장 높으며(신호에 의해 종료되지 않고) EXIT
(또는 동등하게 0
)를 사용해야 합니다 sigspec
(아마도 1
, 2
및 15
).
;
PS arg 명령 끝에 세미콜론( )을 추가할 필요가 없습니다 trap
.
답변2
EXIT
신호번호 대신 사용합니다 .
아래 스크립트는 저에게 효과적입니다. 나는 상수를 사용합니다.
> cat test.sh
#!/bin/bash
trap 'echo trap' EXIT
echo 'Program running'
sleep 1
> ./test.sh
Program running
trap
Bash 맨페이지에서:
sigspec이 EXIT(0)이면 쉘을 종료할 때 arg 명령이 실행됩니다. sigspec이 DEBUG인 경우 arg 명령은 모든 단순 명령, 명령의 경우, case 명령, select 명령, 명령의 모든 산술 이전 및 첫 번째 명령이 셸 함수에서 실행되기 전에 실행됩니다(위의 SHELL GRAMMAR 참조). DEBUG 트랩에 미치는 영향에 대한 자세한 내용은 내장된 shopt의 extdebug 옵션에 대한 설명을 참조하세요. sigspec이 RETURN이면 .shell 함수나 스크립트가 실행될 때마다 arg 명령이 실행됩니다. 또는 소스 내장 프로그램이 실행을 완료합니다.