RHEL init.d 기능은 어떻게 성공하나요?

RHEL init.d 기능은 어떻게 성공하나요?

저는 RHEL의 파생 제품인 Amazon Linux AMI를 사용하고 있으며 SysVint 를 services.servicesfunctions/etc/init.d/functions난 그냥 이해가 안 돼요작동 방식 successfailure기능(비슷한 다른 것도 있지만 warning원칙과 코드는 동일합니다.)

functions스크립트는여기에서 발견함수 success는 다음과 같습니다:

# Log that something succeeded
success() {
  [ "$BOOTUP" != "verbose" -a -z "${LSB:-}" ] && echo_success
  return 0
}

echo_success() {
  [ "$BOOTUP" = "color" ] && $MOVE_TO_COL
  echo -n "["
  [ "$BOOTUP" = "color" ] && $SETCOLOR_SUCCESS
  echo -n $"  OK  "
  [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
  echo -n "]"
  echo -ne "\r"
  return 0
}

"${LSB:-}"솔직히 이 변수를 어디서도 찾을 수 없기 때문에 이 부분을 이해하지 못합니다 LSB. 그러나 중요한 부분은 스크립트가 함수를 사용하는 방법입니다 success. 예를 들어 daemon함수의 마지막 줄은 다음과 같습니다.

[ "$?" -eq 0 ] && success $"$base startup" || failure $"$base startup"

$"$base startup"이 뒤에 오는 매개변수는 확인되지 않으므로 이는 나에게 아무런 의미가 없습니다 . 문자열이 기록되고 있는 것 같은데 어떻게 기록될지는 알 수 없습니다.echoedsuccessecho

정말 버그가 있는 것 같아요. 아니면 뭔가 이해가 안 되는 것 같아요... 함수의 본질은 success커서와 함께 녹색 인라인을 인쇄하는 것인데, 이로 인해 일부 스크립트에서 이상한 출력이 발생합니다. [ OK ]예를 들어 내 tomcat스크립트는 [ OK ]커서 위에 새 줄을 인쇄하는 대신 터미널의 커서에 인쇄합니다. 이는 정말 이상합니다.

이상해 알았어

텍스트는 다음과 같아야 tomcat is running... [ OK ]하지만 내 터미널 라인에 인쇄되므로 내 사용자 이름과 IP가 대부분 잘립니다.

그렇다면 제가 잘못 이해하고 있는 걸까요, 아니면 successRHEL 서비스의 기능이 모든 곳에서 잘못 사용되고 있는 걸까요?

답변1

당신 말이 틀린 것은 아니지만 이러한 기능이 사용되고 있다고는 말할 수 없습니다.틀리게.

"${LSB:-}"솔직히 이 LSB 변수를 어디서도 찾을 수 없어서 이 부분이 이해가 안 되네요 .

어디에서도 $LSB 세트를 찾을 수 없습니다. 이 변수가 검사되는 이유는 다음과 같습니다.

[ "$BOOTUP" != "verbose" -a -z "${LSB:-}" ] && echo_success

테스트 결과는 echo_successBOOTUP 변수의 값이아니요"Verbose", LSB 변수는 다음과 같습니다.아니요놓다. 구문 정의 ${varname:-text}는 다음과 같습니다.

${parameter:-word}는 기본값을 사용합니다.
인수가 설정되지 않거나 비어 있으면 단어의 확장이 대체됩니다. 그렇지 않으면 매개변수 값이 대체됩니다.

여기서 대시 뒤에는 "단어"가 없으므로 $LSB가 설정되지 않거나 null이면 전체 확장 결과가 (None)이 되어 테스트가 -z통과됩니다.

내 거추측하다init 스크립트 동작을 변경하려는 경우 논리가 있습니다.아니요이러한 성공() 또는 실패() 함수를 실행하세요.

두번째,

스크립트가 성공 함수를 사용하는 방법(예: 데몬 함수의 마지막 줄)은 다음과 같습니다.

[ "$?" -eq 0 ] && success $"$base startup" || failure $"$base startup"

이러한 매개변수가 함수에 전달되지만 사용되지 않는다는 점에서 정확합니다. 사용하지 않는 매개변수를 전달하는 것은 무해합니다. 단지 일관성이 없거나 혼란스러울 뿐입니다! 내 거추측하다이러한 함수의 이전 버전에서는 전달된 인수를 살펴보았습니까(아마도 문서화되어 있습니까?).

init_crypto()함수는 성공()(또는 실패())을 호출한다는 점에 유의하세요.아니요매개변수!

관련 정보