![`Starting ... [ ok ]`를 표시하는 책임은 어떻게 됩니까?](https://rvso.com/image/1562705/%60Starting%20...%20%5B%20ok%20%5D%60%EB%A5%BC%20%ED%91%9C%EC%8B%9C%ED%95%98%EB%8A%94%20%EC%B1%85%EC%9E%84%EC%9D%80%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%EB%90%A9%EB%8B%88%EA%B9%8C%3F.png)
다음과 같은 서비스를 시작할 때:
root@foo [~]# service foobar stop
Stopping Foobar: [ OK ]
상태 표시기를 볼 수 있습니다. [ OK ]
이는 에 표시되는 것과 다릅니다 /var/log/boot.log
.
[ OK ] Started LSB: disk temperature monitoring daemon.
...
또는 다음과 다른 경우도 있습니다.
* /proc is already mounted
* Caching service dependencies ... [ ok ]
이 세 가지 예에서 데몬을 표시하고 시작하는 프로세스는 무엇입니까? 다르게 말하면, 어떤 라이브러리 를 사용하여 표시합니까 [ OK ]
?[FAILED]
답변1
수동 호출로 service
/etc/init.d 또는 /etc/rc.d에서 SysV 스타일 스크립트를 실행하면 모든 상태 출력이 달라집니다.전적으로 해당 스크립트에 있습니다.
적절하게 작성된 init.d 스크립트는 배포판에서 제공하는 셸 함수 라이브러리를 사용합니다. 예를 들어 Debian에서 대부분의 스크립트는 파일을 로드(소스) /lib/lsb/init-functions
하고 다음과 같이 제공된 함수를 간단히 호출합니다.
케이스 "$1" in 시작) log_daemon_msg"$DESC 시작 중" "$NAME" do_start 대소문자 "$?" ~에 0|1)log_end_msg0;; 2) log_end_msg 1 ;; 에삭 ;; [...] 에삭
여기에표준 함수 목록LSB에 의해 정의됩니다. (배포판은 다음을 제공할 수 있습니다.추가의위의 예와 같이 표준을 넘어서는 기능을 수행합니다. 또한 OpenRC 또는 Arch Linux 등을 참고하세요.그렇지 않다LSB와 호환되며 완전히 다른 스타일을 사용합니다.)
실제로 일부 배포판에서는 이 상용구 코드를 중앙에서 제공하며 init.d 스크립트에 남은 것은 do_start
. ( /lib/init/init-d-script
예로 Gentoo의 OpenRC와 Debian을 참조하세요 ). 그러나 이는 "표준" LSB 기능이 아닙니다. LSB 호환을 시도하는 스크립트는 여전히 수동으로 수행해야 합니다.
메모:나는 '올바르게 작성'을 강조합니다. 실제로는 그럴 일이 없기 때문입니다.힘인간 감독 이외의 기능을 사용하기 위한 init.d 스크립트. 스크립트가 일반 echo
(또는 cowsay
해당 문제의 경우)을 통해 상태를 보고하려는 경우 항상 그렇게 할 수 있습니다. 이는 특히 일반 채널 외부에 배포되는 상용 소프트웨어의 문제입니다. 상태 출력절대꽤 괜찮아 보입니다(솔직히 전체 init.d 스크립트는 결코 제대로 동작하지 않습니다).
한편, SysV 스크립트가 호출되는 동안부팅 프로세스, 결과는 배포판에 훨씬 더 의존적입니다. 때로는 스크립트 자체에서 직접 출력을 볼 수도 있지만 "기본" 초기화 시스템이 시작하는 모든 서비스에 대해 자체 상태 출력을 제공하는 경우도 있습니다. (예:백그라운드에서 서비스를 시작할 때 Arch Linux의 이전 initscript.)
하지만 두 번째 예는 실제로~ 아니다SysV 스타일 init – systemd입니다(귀하의 예에서는 '레거시' init.d 스크립트를 시작하는 중입니다). Systemd는 서비스 구성(스크립트가 아님)을 사용하는 전체 서비스 관리자이므로모두부팅/종료 상태 출력은 systemd 자체에서 제공됩니다. 이는 init-ng, SMF 또는 Upstart를 포함한 대부분의 다른 "서비스 관리자"에도 적용됩니다.
답변2
이는 배포판 종속 초기화 스크립트에서 비롯됩니다. 프로그램 내용을 확인하세요 service
. 이것은 아마도 기본 관리 스크립트(SysV는 현재 사용되지 않는 것으로 간주됨) 또는 바이너리(systemd가 갈 길)를 호출하는 일부 쉘 스크립트일 것입니다. 이것은 시스템화된 전문가 중 하나입니다. "의존적인" 답변을 얻지 못할 것입니다.