2012-07-08 58 views
0

我在基于mips的系统(特别是路由器上的openwrt)上运行linux。重定向对重启命令的影响

当我运行重启(由busybox提供)(即仅自己的reboot)时,系统将重新启动,但某些服务(webserver,dhcp/dns,dsl stuff)无法启动。

但是,当我通过Web界面重新启动,所有的服务正常启动。我看了看代码,看到网页界面运行了reboot > /dev/null 2>&1。运行此命令也会重新启动并正确启动服务。

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

此外,我想知道,将重新启动包含特定于体系结构的代码?

+1

我不知道你的主要问题,但关于你的“也:”*用户空间程序* ['reboot(8)'](http://linux.die.net/man/8/reboot )只做一个纯系统调用,['reboot(2)'](http://linux.die.net/man/2/reboot);没有任何关于它的体系结构特定(在*概念*中也不是Linux专用的;如果内存用于服务,虽然细节有所不同,但有一个系统调用的名称可以追溯到V7)。 *重新启动*过程肯定会涉及体系结构特定的代码,但它全部在内核和/或固件中。 – zwol 2012-07-08 00:23:10

回答

2

不,重定向stdout/stderr一定不能影响启动过程(无论如何将保存在哪里?)。必须有其他的东西造成这种情况。

“shutdown -r now”有效吗?

+0

不幸的是,关机在系统上不存在,它看起来不像是busybox的一部分。不过感谢Zack,他指出我重启了man.8页面,它说重启运行关机时没有选项运行。当'reboot -f'运行时,系统调用reboot()。这正确地重新启动系统。 [break]我可能误解了我的问题,我不是说重定向直接影响了这个过程。我感觉重定向有助于“重新定义”重启过程。 (将std流重定向到/ dev/null是守护进程的一部分。)我通过运行'reboot&'来测试它,它可以正常工作。 – rhlee 2012-07-08 21:29:22

+1

也许发生了以下情况:您触发重新启动,因此系统开始停止服务。但是,这会杀死您的程序/脚本,这反过来也会杀死挂起的重新启动命令。然后基本上你没有完成重新启动,并最终导致“部分关闭”系统。 分离重启命令绝对是一个好主意。 killall命令应该有一个关闭内置的异常。 – 2012-07-08 21:42:14

+0

这就是它。我从来没有想到,reboot()系统调用可能没有被reboot命令调用过。查看重新启动源代码,它会在运行重新启动之前终止所有进程。因此,杀死父shell进程可能会导致子进程重启进程提前结束。我希望使用uptime命令来测试,看看'reboot'是否确实重启。但由于一些神奇的原因,现在它自己的'reboot'正在工作。 – rhlee 2012-07-09 21:51:55