3
프로세스가 실행되는 동안 데몬에서 로그를 캡처해야하는 프로세스가 있습니다. 나는 함께 자갈을 만든 해결책이 있지만 누군가가 나를 좀 더 우아한 방법으로 가리켜 주길 바랬다. 나를 괴롭히는 구체적인 것은 set -e
을 사용하여 어떤 문제라도 알려주므로 kill
은에서 오류를 생성합니다. 나는 || :
으로 먹어야하는데, 저에게 추한 해킹입니다.실시간으로 발췌 부분에 로그를 작성하십시오.
#!/bin/bash
set -e
LOGDIR="/path/to/logs"
LOCKFILE="/path/to/lockfile"
NOW=$(date +'%Y-%m-%d-%H%M')
bail() {
echo "$(hostname) $(pwd) error in line $1 of THING" | mail -s "Error: THING on $(hostname) line# $1" [email protected]
}
if [ -f $LOCKFILE ] ; then
echo "$(hostname) $(pwd) ${0} is locked $(ls -l ${LOCKFILE})"| mail -s "LOCKED: THING" [email protected]
exit
else
trap "rm -f $LOCKFILE" EXIT
trap 'bail $LINENO' ERR
fi
echo $$ > $LOCKFILE
/bin/date >> $LOCKFILE
tail -f path/to/daemon/logfile > $LOGDIR/${NOW}-THING.log &
TAILPID=$!
sleep 1
/path/to/monitored-process
sleep 1 # Allow for last couple log entries to flush
kill $TAILPID
wait $TAILPID || : # Need the no-op to eat the expected error from `kill`ing tail
/bin/rm -f $LOCKFILE
제 의견으로는 당신이 가지고있는 것은 꽤 우아합니다. 해결책으로, 죽이기 직전에'set + e'를 넣고,'set -e'를 뒤에 넣는 것은 어떻습니까? 꼬리가 죽을 때의 오류 상태가 예상되므로이를 찾지 마십시오. –
그건 .. 사실 그렇게 생각 했어야 했어. 이 대답을하면 받아 들일 것입니다. 감사. – DopeGhoti
여분의 눈은 항상 도움이됩니다! :-) –