Linux에서는 부팅 중에 실행할 스크립트를 작성하고 다양한 설치 방법을 가지고 놀았습니다. 더 큰 스크립트 /etc/init.d
의 경우 적절한 /etc/rc.d/rc?.d
런레벨을 넣고 연결합니다 . 작은 스크립트의 경우에 추가하겠습니다 /etc/rc.d/rc.local
. 이 과정은 순조롭게 진행되고있는 것 같습니다.
이제 스크립트 중 하나를 조정했는데 실패했습니다. 오류 출력을 캡처 할 수 없기 때문에 진단하는 데 시간이 많이 걸립니다. /var/log/messages
나머지 부분을 확인 하고 찌르지 /var/log
만 아무 것도 찾을 수 없습니다.
아는 사람 있나요:
- 이 오류 메시지가 자동으로 어딘가에 캡처됩니까?
- 그렇지 않다면 init.d 스크립트에서 stdout / stderr를 어떻게 캡처 할 수 있습니까?
미리 감사드립니다.
답변
-
아니요 -STDOUT (사용하는 경우
echo
) 또는 STDERR (사용하는 경우echo >&2
)로 이동합니다. -
스크립트는 자체적으로 로그 및 / 또는 syslog에 작성해야합니다 (배포에는 init.d 함수 가 포함되어 있을 수 있습니다-질문에 분포를 추가하십시오).
로그를 찾으면 tee
명령을 찾으십시오 . syslog를 찾으면를보십시오 logger
. 원하는 방식으로 조합 할 수 있습니다.
답변
스크립트를 호출하고 출력을 파일로 리디렉션하는 랩퍼 스크립트 작성
#!/bin/bash
/path/to/your/script &>/path/to/logfile
답변
다음과 같이 메시지를 화면과 syslog에 모두 에코하는 기능을 만들 수 있습니다.
LOGGER="/usr/bin/logger -t $myScript" # check the location of logger for your system
myEcho () {
echo "$1"
$LOGGER "$1"
}
이 파일을 별도의 파일에 넣고 스크립트에 포함시킬 수도 있습니다.
#!/bin/bash
myScript=$(basename $0)
[ -r /myFunctions/myecho ] && . /myFunctions/myecho
답변
init 스크립트의 메시지는 일반적으로 어디서나 캡처되지 않습니다. 따라서 직접 수행하는 방법을 구현해야합니다. 좋은 방법은 logger
모든 출력을 syslog에 보내는 데 사용 하는 것입니다 . 이 예제는 stdout 및 stderr을 syslog로 보냅니다.
exec 1> >(logger -s -t $(basename $0)) 2>&1
나는이 위대한 기사에서 그것을 발견했다 : http://urbanautomaton.com/blog/2014/09/09/redirecting-bash-script-output-to-syslog/ .