【问题标题】:Effect of redirects on reboot command重定向对重启命令的影响
【发布时间】:2012-07-08 00:06:15
【问题描述】:

我在基于 mips 的系统(特别是路由器上的 openwrt)上运行 linux。

当我运行重启(由busybox提供)即reboot自己运行时,系统会重启,但某些服务(网络服务器、dhcp/dns、dsl的东西)没有启动。

但是,当我通过 Web 界面重新启动时,所有服务都正常启动。我查看了代码,发现 Web 界面运行 reboot > /dev/null 2>&1。运行此命令还会重新启动并正确启动服务。

我的问题是,将 stdout 和 stderr 重定向到 /dev/null 对下次启动时服务的启动有何影响?

另外,我想知道,reboot 是否包含特定于架构的代码?

【问题讨论】:

  • 我不知道你的主要问题,但关于你的“也:” 用户空间程序 reboot(8) 只进行了一个根系统调用,@987654322 @;它没有特定于体系结构的内容(在 concept 中也不是特定于 Linux 的;如果有记忆的话,一直有一个使用该名称的系统调用可以追溯到 V7,尽管细节有所不同)。 重启过程确实涉及特定于架构的代码,但它都在内核和/或固件中。

标签: linux redirect reboot busybox openwrt


【解决方案1】:

不,重定向 stdout/stderr 一定不能影响引导过程(无论如何,它会保存在哪里?)。一定是有其他原因造成的。

“shutdown -r now”有效吗?

【讨论】:

  • 不幸的是,系统上不存在关机,也不像是busybox的一部分。但是感谢 Zack,他将我指向重新启动 man.8 页面,它说重新启动运行关闭时运行没有选项。当reboot -f 运行时,它也会系统调用reboot()。这会正确地重新启动系统。 [break] 我的问题可能表述错误,我并不是说重定向直接影响流程。我觉得重定向有助于“解除”重启过程。 (将 std 流重定向到 /dev/null 是守护进程的一部分。)我通过运行 reboot & 对其进行了测试,它可以正常工作。
  • 可能发生了以下情况:您触发了重新启动,因此系统开始停止服务。但是,这会杀死您的程序/脚本,这反过来也会杀死挂起的重新启动命令。然后基本上你没有完成重新启动,并最终得到一个“部分关闭”的系统。分离重启命令绝对是一个好主意。 killall 命令应该有一个内置的异常关闭。
  • 一定是这样。我从来没有想过 reboot() 系统调用可能没有被 reboot 命令调用。查看重启源代码,它会尝试在运行重启之前杀死所有进程。因此,杀死父 shell 进程可能会导致子重启进程过早结束。我希望使用 uptime 命令对此进行测试,以查看 reboot 是否确实重新启动。但出于某种神奇的原因,reboot 现在正在运行。
猜你喜欢
  • 2016-06-21
  • 2015-10-02
  • 2013-09-25
  • 1970-01-01
  • 2011-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多