如何在当前 shell 的所有祖先死亡后立即运行的 shell 脚本中安排一个任务?

如何在当前 shell 的所有祖先死亡后立即运行的 shell 脚本中安排一个任务?

我正在制作一个用于软件更新的 opkg 包。

该软件包需要在安装后重新启动,并且需要在下次重新启动后完成一些工作。

我在 postinst 脚本中添加了 shutdown -h now ,但它似乎关闭得太早并中断了 opkg install 命令。

那么 opkg 系统将不会记录软件包信息,就像 opkg list-installed 不会列出已安装的软件包。

所以我试图解决的问题是:如何在 OPKG 包的 postinst 脚本中可靠地安排关闭/重新启动?

但我想根本问题是,如何在 shell 脚本中安排一个任务,该任务在当前 shell 的所有祖先死亡后立即运行,但不早于这个时间?

参考:什么是 postinst 脚本和 opkg 包管理系统

答案1

问题的定义不明确。如果您遵循从子进程到父进程的进程链,您最终将到达进程 1 (init)。当它死掉时,意味着系统正在重新启动。

重新启动计算机通常不会作为升级的一部分完成,因为只有管理员知道何时可以安全重新启动。升级期间重新启动绝对不安全。 (是的,Windows 做到了这一点,而且这是一个不该做的事情的光辉例子——许多 Windows 用户都有过由于强制升级导致重新启动而丢失工作的恐怖故事。)

如果有人参加升级,请向管理员显示一条消息,告诉他们尽快重新启动。

如果升级无人参与,则让自动升级系统安排重新启动。仅有的你的升级系统知道在特定时间安全重新​​启动的特定情况 - 因为您已在服务器上激活了故障转移,或者因为您的嵌入式设备控制的生产线已停止。您的升级系统运行opkg,然后检查是否需要升级;例如,如果文件/reboot_needed存在,它可能会重新启动(当安全时)。

相关内容