![为什么“立即关闭”(没有其他参数)不运行初始化脚本?](https://linux22.com/image/60459/%E4%B8%BA%E4%BB%80%E4%B9%88%E2%80%9C%E7%AB%8B%E5%8D%B3%E5%85%B3%E9%97%AD%E2%80%9D%EF%BC%88%E6%B2%A1%E6%9C%89%E5%85%B6%E4%BB%96%E5%8F%82%E6%95%B0%EF%BC%89%E4%B8%8D%E8%BF%90%E8%A1%8C%E5%88%9D%E5%A7%8B%E5%8C%96%E8%84%9A%E6%9C%AC%EF%BC%9F.png)
我在 Pi 上运行 Rasbpian,并且我有一个脚本/etc/rc0.d
(或更准确地说,是一个符号链接/etc/init.d/myscript.sh
),它执行一些 GPIO 输出以通知用户可以关闭电源。
如果我运行sudo shutdown -h now
,脚本就会运行,并且系统会崩溃。
如果我运行sudo shutdown now
,脚本会执行不是运行,但系统崩溃了。
我找不到任何文档来说明在shutdown now
没有其他参数的情况下运行时真正应该发生的情况。
-h
在这种情况下有什么区别?运行shutdown now
真的不会调用 runlevel0
吗?
更新:我发现了这个文档(unixhelp.ed.ac.uk),表示不带参数的默认行为是进入运行级别1
。但我在 中也有一个脚本/etc/rc1.d
,但它不能在shutdown
.
根据要求,以下是前几行last -x
(箭头是我的):
pi pts/3 vidar-ramdals-ma Fri Jan 9 18:07 still logged in
runlevel (to lvl 2) 3.12.28+ Fri Jan 9 18:04 - 18:07 (00:02)
reboot system boot 3.12.28+ Fri Jan 9 18:04 - 18:07 (00:02)
shutdown system down 3.12.28+ Fri Jan 9 18:04 - 18:04 (00:00)
runlevel (to lvl 0) 3.12.28+ Fri Jan 9 18:04 - 18:04 (00:00) <- shutdown -h now
pi pts/3 vidar-ramdals-ma Fri Jan 9 18:02 - down (00:01)
runlevel (to lvl 2) 3.12.28+ Fri Jan 9 18:01 - 18:04 (00:02)
reboot system boot 3.12.28+ Fri Jan 9 18:01 - 18:04 (00:02)
pi pts/3 vidar-ramdals-ma Fri Jan 9 17:57 - crash (00:04) <- shutdown now
pi pts/3 vidar-ramdals-ma Fri Jan 9 01:30 - 01:34 (00:03)
pi pts/3 vidar-ramdals-ma Fri Jan 9 01:29 - 01:29 (00:00)
runlevel (to lvl 2) 3.12.28+ Fri Jan 9 01:23 - 18:01 (16:38)
reboot system boot 3.12.28+ Fri Jan 9 01:23 - 18:04 (16:41)
该runlevel (to lvl 0)
行出现在我之后shutdown -h now
,而该crash
行来自shutdown now
.是否shutdown now
会导致“崩溃”并阻止其运行初始化脚本?
答案1
文件夹中文件的名称rc.d
很重要,并且不清楚您将 .txt 文件的符号链接命名为什么/etc/init.d/myscript.sh
。
示例来自/etc/rc1.d
:
lrwxrwxrwx 1 root root 25 Nov 3 2011 K99readahead_early -> ../init.d/readahead_early
lrwxrwxrwx 1 root root 25 Nov 3 2011 K99readahead_later -> ../init.d/readahead_later
lrwxrwxrwx 1 root root 22 Nov 3 2011 S02lvm2-monitor -> ../init.d/lvm2-monitor
lrwxrwxrwx 1 root root 18 Nov 3 2011 S13cpuspeed -> ../init.d/cpuspeed
start
如果提供了 S,那么它将使用;运行脚本。如果提供了 K,它将运行带有 的脚本stop
。该整数值就是应该运行的优先级。