tail -f에서 기본 스크립트를 반환하는 방법

tail -f에서 기본 스크립트를 반환하는 방법

ksh로그 파일을 보는 데 사용하는 스크립트가 있습니다 tail -f.

tail프로세스를 종료하고 기본 스크립트를 계속 실행하려면 어떻게 해야 합니까 ?

저는 이것을 AIX 7.1에서 실행하고 있습니다.
- - - - - - - - - - - - - - - - - - - - - - -편집하다- - ------------------------ -------
Giles의 답변을 바탕으로 스크립트에서 다음을 시도했습니다.

trap 'echo "tail process terminated!"' 2
tail -f mylog.log
trap - 2

이제 tail 명령을 실행한 후 Ctrl+C를 누르면 tail 프로세스가 종료되고 스크립트가 계속 실행됩니다. 하지만 새로운 문제는 Ctrl+C를 다시 누르면 스크립트가 종료되지 않는다는 것입니다. 누구든지 도와줄 수 있나요?

답변1

tail스크립트에서 명령을 배경으로 설정 하지 않으면 쉘은 명령이 종료될 때까지 기다리게 되지만 이는 결코 발생하지 않습니다.

다른 작업을 수행해야 하고 tail나중에 명령을 종료하려는 경우 다음을 수행할 수 있습니다.

tail -f logfile &
tailpid=$!
...do some other stuff...
kill $tailpid
...carry on...

답변2

요점 tail -f은 명시적으로 종료될 때까지 영원히 실행된다는 것이므로 종료를 예약해야 합니다.

tail프로세스 종료 시기를 결정하는 로직이 있는 경우 프로세스 ID를 가져와 tail필요할 때 종료를 트리거하도록 준비합니다. 예를 들어 1분 후에 종료하려면 다음과 같이 하세요.

tail -f file.log &
tail_pid=$!
sleep 60
kill $tail_pid
do_more_stuff

tail사용자가 +를 누를 Ctrl때 쉘 스크립트를 종료하지만 종료하지 않으 려면 C,이것지능을 신호하다신호. 빈 문자열로 인해 tail하위 프로세스와 호출 셸이 SIGINT를 무시하게 되므로 트랩을 비어 있지 않은 문자열(null이 아닌 값, 심지어 공백도 가능)로 설정해야 합니다 .

trap : INT       # set a signal handler for SIGINT that does nothing
tail -f file.log
do_more_stuff    # executed when tail is killed, e.g. by the user pressing Ctrl+C
trap - INT       # reset SIGINT to killing the script

관련 정보