Linux

使用 update-rc.d 創建僅關閉腳本

  • June 30, 2015

我有一個執行標準 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
  1. 創建一個poweroff在 /etc/init.d 中呼叫的腳本
  2. 執行命令 sudo update-rc.d poweroff stop 99 0

這將為我生成一個腳本:當且僅當系統停止時/etc/rc0.d/K99poweroff才會呼叫。/sbin/poweroff.bin

我有三個問題:

  1. 每當我執行sudo update-rc.d poweroff stop 99 0 .它時,它只會導致/etc/rc0.d/K01poweroff創建一個名為的腳本。我究竟做錯了什麼?99怎麼了?
  2. 執行級別 0 期間啟動和停止選項的意義是什麼?這個腳本應該是 K99 還是 S99?執行級別 0 的啟動腳本似乎沒什麼意義。
  3. 執行級別 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,除非您有一組非常複雜的依賴項。但是如果您將提供的行更改為停止,它應該可以工作。

引用自:https://unix.stackexchange.com/questions/212968