情况

情况

情况

计算机(运行 Ubuntu 14.04)连接到网络化的控制计算机本身电源的设备。

收到特定信息后signal A,计算机必须signal B向该网络设备发送一个命令(除其他外)将切断计算机的电源。

问题

我应该什么时候将其发送signal B到联网设备,以尽量减少断电造成的损害?

signal A我假设我可以使用关闭序列中的某处 send 来触发关闭序列signal B。但我应该什么时候真正发送呢?

我想我的/etc/rc0.d会像下面这样

K98signalB # Actually sends signalB to cut power
K99networking # Renamed from K01networking, since I need to keep networking alive

答案1

假设是linux

几年前我研究过类似的事情。我无法回答的问题是网络是否仍然可以在适当的时间使用。

要真正拔掉电源插头,而不是尝试连接到 SystemD 或 sysvinit,您确实应该尝试使用内核 mod 直接连接到内核。

当我搜索这个主题时,我最终在这里找到了一些信息:Linux 内核的系统关闭内部是如何工作的?

这让我找到了这里的内核代码: https://elixir.bootlin.com/linux/v5.0.5/source/arch/arm64/kernel/process.c#L136

void machine_power_off(void)
{
    local_irq_disable();
    smp_send_stop();
    if (pm_power_off)
        pm_power_off();
}

要正确执行此操作,您需要编写一个内核模块,其中包含通过网络与电源开关通信的函数,然后在函数指针中注册您的函数pm_power_off


触发系统关闭可能更加依赖于系统。最简单的方法可能是调用现有的命令行程序,例如sutdownpoweroff

相关内容