Linux
使用 update-rc.d 創建僅關閉腳本
我有一個執行標準 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”,電腦是否會被發送到執行級別 0,然後返回到執行級別 6?
基於依賴的元初始化系統會忽略請求的編號。你有錯誤的提供!關鍵線索來自另一個腳本。讓我們看一下
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,除非您有一組非常複雜的依賴項。但是如果您將提供的行更改為停止,它應該可以工作。