我需要找到一种方法,在实际执行和命令之前以某种方式拦截halt
和命令并通过 shell 脚本执行不同的操作。如果不为此编写内核模块,这可能吗?reboot
halt
reboot
以下是整个场景。在 Raspberry Pi 上,我有一些外部硬件连接到 GPIO 引脚。我想在 Raspberry Pi 发生以下情况时通知所述硬件:
- 通过在一定时间内脉冲一个 GPIO 来重新启动。
- 通过在 CPU 实际停止之前将 GPIO 永久拉低来关闭。
我已经考虑过将脚本放入其中rc.d/
,但我不知道如何在执行脚本时从脚本内部确定系统是停止还是仅重新启动。
有什么想法吗?
答案1
这是一个常见的 Linux 任务 - 您可以使用运行级脚本来完成它。这Linux.com 上的页面有非常好的介绍。
基本上,Linux 上有 7 个运行级别:
- 0——停止
- 1 – 单用户模式
- 2 - 基本多用户模式(无需联网)
- 3 - 完整(基于文本)多用户模式
- 4-未使用
- 5 - 完整(基于 GUI)多用户模式
- 6 - 重启
该halt
命令本质上将计算机的运行级别设置为 0。发生这种情况时,所有各种运行级别 0 脚本都会发生。您可以通过执行 来查看所有这些脚本ls -l /etc/rc0.d/
。
类似地,该reboot
命令将计算机的运行级别设置为 6,并将运行 中的所有脚本/etc/rc6.d/
。
解决问题的方法是创建一个 init 样式的脚本。您可以复制现有脚本之一,也可以从头开始创建自己的脚本(请参阅这StackExchange 线程以获取更多详细信息;或者,互联网上也有大量关于在 Linux 中创建初始化脚本的文档)。
如果您希望脚本在计算机关闭和重新启动时执行相同的操作,只需在和/etc/rc0.d
目录中创建指向脚本的软链接/etc/rc6.d
。
如果您希望根据计算机关闭还是重新启动来发生两件不同的事情,请创建两个不同的脚本并在相应的目录中对其进行软链接。