update-rc.dを使用して終了専用スクリプトを作成する

update-rc.dを使用して終了専用スクリプトを作成する

標準のRaspbianディストリビューションを実行するRaspberry PIがあります。終了シーケンスが終了したら実行する必要がある小さなCプログラムがあります。これは、GIPO出力の電源にいくつかのロジックハイパルスを送信してRaspberryボードの電源を切断するように指示することです。シャットダウンスクリプトは、PIが再起動または起動したときではなく、システムがシャットダウンしたときにのみ呼び出す必要があります。

私は成功せずにこれを行うためにupdate-rc.dを使用しようとしました。 update-rc.d ドキュメントを理解する方法は次のとおりです。

  1. 私の実行可能ファイル(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
    
  2. poweroff/etc/init.d にスクリプトを生成します。

  3. sudo update-rc.dコマンドを実行しますpoweroff stop 99 0

これでスクリプトが生成されます。システムが停止している場合にのみ呼び出されます/etc/rc0.d/K99poweroff/sbin/poweroff.bin

3つの質問があります。

  1. 実行するたびに、名前付きsudo update-rc.d poweroff stop 99 0 .スクリプトのみが表示されます。/etc/rc0.d/K01poweroff私は何が間違っていましたか? 99には何があったのでしょうか?
  2. ランレベル0での起動と停止のオプションの重要性は何ですか?このスクリプトはK99またはS99でなければなりませんか?ランレベル0の起動スクリプトはほとんど意味がないようです。
  3. ランレベル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。電力損失ではなく停止に依存することに注意してください。 Debian の一時停止スクリプトを見ると、これをはっきりと見ることができます。

### 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と同じ名前で呼び出されます。ただし、プロバイダー回線を停止するように変更すると機能します。

おすすめ記事