표준 Raspbian 배포판을 실행하는 Raspberry PI가 있습니다. 종료 시퀀스가 끝나면 실행해야 하는 작은 C 프로그램이 있습니다. 이것이 하는 일은 GIPO 출력의 전원 공급 장치에 몇 개의 로직 하이 펄스를 전송하여 Raspberry 보드의 전원을 차단하도록 지시하는 것뿐입니다. 종료 스크립트는 PI가 재부팅되거나 시작될 때가 아니라 시스템이 종료될 때만 호출되어야 합니다.
나는 성공하지 못한 채 이 작업을 수행하기 위해 update-rc.d를 사용하려고 노력해 왔습니다. update-rc.d 문서를 이해하는 방법은 다음과 같습니다.
내 실행 파일(
poweroff.bin
)을 /sbin에 복사하고 필요한 권한과 LSB 헤더를 부여합니다.#!/bin/sh ### BEGIN INIT INFO # Provides: poweroff # Required-Start: # Required-Stop: $all # Default-Start: # Default-Stop: 0 # Short-Description: Power off. # Description: Send a power off signal to the PM board. # X-Interactive: false ### END INIT INFO /sbin/poweroff.bin exit 0
poweroff
/etc/init.d에 스크립트를 생성하세요.- sudo update-rc.d 명령을 실행합니다
poweroff stop 99 0
.
그러면 스크립트가 생성됩니다. 시스템이 중지된 경우에만 호출됩니다 /etc/rc0.d/K99poweroff
./sbin/poweroff.bin
세 가지 질문이 있습니다.
- 실행할 때마다
sudo update-rc.d poweroff stop 99 0 .
이름이 지정된 스크립트만 표시됩니다./etc/rc0.d/K01poweroff
내가 뭘 잘못했나요? 99에는 무슨 일이 있었던 걸까요? - 런레벨 0에서 시작 및 중지 옵션의 중요성은 무엇입니까? 이 스크립트는 K99 또는 S99여야 합니까? 런레벨 0 시작 스크립트는 거의 의미가 없는 것 같습니다.
- 런레벨 0은 종료 시에만 사용됩니까? 즉, "shutdown -r now"를 수행하면 컴퓨터가 런레벨 0으로 보내졌다가 다시 런레벨 6으로 돌아가나요?
답변1
종속성 기반 메타 초기화 시스템은 요청된 숫자를 무시합니다. 제공하신 콘텐츠가 잘못되었습니다! 핵심 단서는 다른 스크립트에서 나왔습니다. 한 번 보자 umountroot
:
### BEGIN INIT INFO
# Provides: umountroot
# Required-Start:
# Required-Stop:
# Should-Stop: halt reboot kexec
# Default-Start:
# Default-Stop: 0 6
# Short-Description: Mount the root filesystem read-only.
### END INIT INFO
이 줄을 좀 더 자세히 살펴보겠습니다 Should-Stop
. 전력 손실이 아니라 정지 여부에 달려 있다는 점에 유의하세요. 데비안의 일시 중지 스크립트를 보면 이를 명확하게 볼 수 있습니다:
### BEGIN INIT INFO
# Provides: halt
# Required-Start:
# Required-Stop:
# Default-Start:
# Default-Stop: 0
# Short-Description: Execute the halt command.
# Description:
### END INIT INFO
업데이트 스크립트는 여전히 K99라고 부르지 않지만 매우 복잡한 종속성 세트가 없는 한 K15와 같은 이름으로 부를 것입니다. 그러나 공급자 회선을 중지하도록 변경하면 작동합니다.
답변2
- 종료 스크립트는 역순으로 번호가 매겨져 있으므로 역순으로 실행되므로 99 대신 1을 사용하는 것이 좋습니다.
- 어떤 면에서는 원할 경우 런레벨 0에서 서비스를 시작할 수 있지만 실제로는 원하지 않습니다. (스크립트를 시작으로 실행할 수 있지만 어느 스크립트가 시작 또는 중지 스크립트를 먼저 실행했는지 기억이 나지 않습니다.) 실행 수준 0에서 호출된 대부분의 스크립트는 다른 실행 수준에서도 사용되므로 중지하기만 하면 됩니다. Snn 스크립트는 실행레벨 0에서 시작되고 호출됩니다.
- 예, 아니오. 또는 자동 전원 관리 이전에 더 자세히 설명하면 런레벨 0은 또 다른 런레벨일 뿐입니다. 종료할 때 마지막으로 표시되는 것은 전원 스위치를 켜라는 메시지입니다. 이 시점에서 런레벨 변경 신호를 보낼 수 있으면 시스템을 다시 시작할 수 있습니다. 전체 전원 관리 기능이 있는 컴퓨터에서는 런레벨 0에 도달하기 위한 마지막 단계로 컴퓨터의 전원이 꺼집니다. 런레벨 6은 유사하지만 별도의 런레벨이며 런레벨 0과 6 사이를 전환하는 표준 사용 사례가 없습니다. (일반 용도로 런레벨 0과 6을 사용하고 종료 및 재시작을 다른 런레벨로 다운그레이드하는 배포판을 가질 수도 있습니다.)