2014-08-28 193 views
3

我使用外部电源在raspberrypi板上运行Linux raspberrypi 3.6.11+。电源“断开”开关通过GPIO进行控制。关闭linux然后关闭电源的正确方法是什么?

我想做一个“shutdown -h -P now”,等待系统关闭(暂停),然后通过运行程序(killpower)来切断相应的gpio引脚来关闭电源。我的主要目标是确保文件系统处于断电时不会损坏的状态。

我试图利用运行级别1脚本killproc向每个正在运行的进程发送SIGTERM(和SIGKILL)。我写了killpower来捕捉SIGTERM,等待20秒,然后发送gpio powerkill序列。我还修改了killproc脚本,使其不会SIGKILL我的killpower pid,即使它在SIGTERM超时之后仍在运行。

当这不起作用时,我发现在killproc运行后,/init.d/halt SCRIPT运行,它调用/ sbin/halt。/sbin/halt也会杀死所有使用SIGKILL的进程,所以我希望我的killpower proc在20秒之前被杀死。现在,我不明白这种方法是如何工作的。

我也看到init可以对SIGPWR信号(不推荐)采取行动,但它可以执行powerwait/powerfail。此时系统是否处于关闭状态?我似乎无法找出这些程序应该实施的内容。

我想在init.d中安装另一个关机脚本,但我很困惑它应该“停止”在哪个运行级别(级别1或级别0)。

由于关闭命令而在执行/ sbin/halt之前关闭电源是否正常?我纠正一旦执行/ sbin/halt,没有别的东西会运行?

+0

如果您担心会破坏您的文件系统,那么在所有其他可能使文件保留为写入状态的进程都已被终止(例如rsyslogd)后,如何尝试使用'ro'(只读)选项重新挂载fs。如果重新安装只读成功,应该安全地杀掉电源而不会损坏任何东西。不确定重新计数是否刷新钱币,因此可能会添加对“同步”的调用。 – oxygene 2014-08-28 20:24:37

+0

看看/etc/rc0.d脚本,有umountfs和umountroot这样做:重新安装fs ro。我已经把我的“杀伤力”proc在这之后执行,但是在停止之前。我认为真正的解决方案可能是用ACPI重建内核,但可能在另一天。 – user1967890 2014-09-02 00:46:11

回答

0

我在远程登录时关闭linux盒子的方法是简单地使用'poweroff'命令。然后系统正常关闭,最后自动关闭 - 仅此而已,没有什么,正是我想要的。

+1

poweroff与halt -p相同。如果不在运行级别0时调用halt,则会调用shutdown。关机最终使系统运行级别为0,然后暂停调用。我需要一个挂钩来停止实际命令电源关闭。 – user1967890 2014-08-28 17:18:33