Linux init.d / rc.d 스크립트에서 오류 메시지를 찾는 방법은 무엇입니까?


28

Linux에서는 부팅 중에 실행할 스크립트를 작성하고 다양한 설치 방법을 가지고 놀았습니다. 더 큰 스크립트 /etc/init.d의 경우 적절한 /etc/rc.d/rc?.d런레벨을 넣고 연결합니다 . 작은 스크립트의 경우에 추가하겠습니다 /etc/rc.d/rc.local. 이 과정은 순조롭게 진행되고있는 것 같습니다.

이제 스크립트 중 하나를 조정했는데 실패했습니다. 오류 출력을 캡처 할 수 없기 때문에 진단하는 데 시간이 많이 걸립니다. /var/log/messages나머지 부분을 확인 하고 찌르지 /var/log만 아무 것도 찾을 수 없습니다.

아는 사람 있나요:

  1. 이 오류 메시지가 자동으로 어딘가에 캡처됩니까?
  2. 그렇지 않다면 init.d 스크립트에서 stdout / stderr를 어떻게 캡처 할 수 있습니까?

미리 감사드립니다.



systemd를 사용하여 최신 배포판을 사용하면 배포판을 처리하고 각 서비스의 로그 메시지를 저널링 할 수 있습니다.
eckes

답변:


17
  1. 아니요 -STDOUT (사용하는 경우 echo) 또는 STDERR (사용하는 경우 echo >&2)로 이동합니다.

  2. 스크립트는 자체적으로 로그 및 / 또는 syslog에 작성해야합니다 (배포에는 init.d 함수 가 포함되어 있을 수 있습니다-질문에 분포를 추가하십시오).

로그를 찾으면 tee명령을 찾으십시오 . syslog를 찾으면를보십시오 logger. 원하는 방식으로 조합 할 수 있습니다.



6

다음과 같이 메시지를 화면과 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

고마워, 이것은 내가 찾던 것에 더 가깝습니다. I / O를 리디렉션하는 방법을 알고 있지만 로거를 호출하는 방법을 몰랐습니다.
McKAMEY

인가 [ -r ... ]가 존재하는지 확인하는 테스트는?
McKAMEY

예, 파일을 읽을 수 있는지 확인하십시오.
ott--

5

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/ .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.