从 /tmp 运行 busybox 小程序

从 /tmp 运行 busybox 小程序

无头 Linux 设备存在问题。长话短说:rootfs 变得不可用,这会阻止一切。电源循环是唯一的出路,我想自动重新启动而不是手动电源循环。

有一个/tmp独立于 rootfs 的文件夹:

tmpfs on /tmp type tmpfs (rw,relatime) 

所以我有一个想法,复制busybox到这里,并在后台运行一个脚本:

# cp /bin/busybox /tmp
# (/tmp/busybox sleep 60;/tmp/busybox reboot) &
#

然后我提出了有问题的情况,让 rootfs 宕机,然后等待。但 60 秒后没有发生重启。

尽管/不可用,但是这个命令不是必须重新启动设备吗?

答案1

一个明显的问题是您创建的副本不可执行,除非您的umask.虽然您可以使用,但在复制时chmod使用该选项更容易。-p

cp -p /bin/busybox /tmp

还有其他潜在的问题。

/tmp 中的文件系统可能不允许可执行文件。创建副本后,您应该验证该副本是否确实可以在您的系统上执行。您可以使用类似的命令/bin/busybox echo test

根据您的情况,还有更多困难。您想在 rootfs 不可用时调用此函数。不幸的是,/tmp也是挂载在根下面的。但如果内核在内存中有足够的信息可以在/tmp不访问 rootfs 的情况下访问,则访问是可能的。当您在 60 秒后进行测试时,该信息可能还存在于内存中,但在发生错误时运行数天后,内存中已不再存在该信息。

如果您想避免系统故障后需要访问/tmp,可以使用配置为直接调用小程序的 Bbusybox,而不需要访问文件系统。然后,您在 Busybox shell 中运行一个脚本来/tmp检查情况并尝试重新启动。

您可能还想查看看门狗。

相关内容