태그 보관물: init.d

init.d

Linux init.d / rc.d 스크립트에서 오류 메시지를 찾는 방법은 무엇입니까? 하나를 조정했는데 실패했습니다. 오류 출력을 캡처 할

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를 어떻게 캡처 할 수 있습니까?

미리 감사드립니다.



답변

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

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


답변