我正在向 Free BSD 计算机发送重启和关机命令。但是我想检查该计算机是否真的会关机或重启(我从重启计算机发送此命令,我想确定我的命令是否会运行)我不想 ping 等,有没有什么命令可以学习它?
编辑1:我认为我应该更清楚地说明我的问题。我从 Java 服务器应用程序发送了以下命令之一:
reboot // or any other command to reboot
shutdown -p now
我在客户端的另一个 Java 程序中调用该命令。让我们考虑一下重启场景。在我从服务器端发送重启命令后,我想检查客户端是否会重启。如果我在发送重启命令后对其进行 ping,客户端 Free BSD 机器可能仍处于活动状态。但是它可以在一段时间后重启。另一方面,在我发送重启命令后,可能会发生一些不好的事情,通信中断,客户端可能无法收到重启命令。
我该如何处理这个问题(我不想用 Java 端解决)Free BSD 是否将重启或关机信号保存在某处(以知道机器将重启或关机)并且我可以查询机器是否计划立即重启或关机?
编辑2: 服务器向客户端发送其中一个命令(我的服务器和客户端都是用 Java 编写的)如果我在发送关机命令后执行 ping 操作,则机器可能会关机但仍处于运行状态(它可能会在 2 秒后关机)。如果我可以查询我的客户端是否收到了关机(或重启)命令,即使它仍处于运行状态,我也会接受,OK 它会关机(或重启)如果我无法得到对客户端查询的答复,则意味着它不存在,因此我会接受它已关机(或重启)。我该如何查询我的机器?
答案1
除非您使用的是具有有问题的 BIOS 的旧 x86 系统或具有某种有问题的固件的非 x86 系统,否则reboot
应该始终重新启动,假设您没有遇到设备挂起或有缺陷的设备驱动程序/内核模块的问题。
poweroff
略有不同。这需要 x86 机器支持 ACPI。但是,这应该只在较旧的 x86 硬件上才会出现问题。我有一块双 533Mhz Pentium-II 主板,如果启用 ACPI,则只有 1 个 CPU 可见。禁用 ACPI 允许使用两个 CPU。但是,由于未启用 ACPI,因此poweroff
实际上不会关闭系统,而只是停止它。我相信这个系统是 90 年代中后期的。我无法想象这会成为任何较新系统的问题。
在非 x86 机器上,除非您对该 CPU 或主板有特定的内核支持,否则它可能不会关闭系统。
当然,如果您当前运行的内核不支持 ACPI,您的内核就可能无法关闭机器。
因此,您能做的最好的事情可能是检查 ACPI 支持。
答案2
除了 ping 之外,您还可以在机器上运行守护进程(类似sshd
- 我假设您正在这样做,因为您正在远程连接),如果连接失败,则机器(大概)关闭。
答案3
好的。我现在的理解如下:
客户端的 Java 应用程序发送命令reboot
或shutdown -p now
。然后连接可能会中断,并且您想知道命令是否仍能完成。
关机的答案很简单:是的,它完成了。我经常使用关机,并提前几个小时设置时间,然后注销,服务器就会在指定的时间顺利关闭。
重新启动时也会发生同样的事情shutdown -r
。
我不知道会发生什么/sbin/reboot
。我从未使用过它。我怀疑它仍然会完成,但我从未测试过。
答案4
在 free bsd 中,它会创建一个文件/var/运行/nologin。我检查它以了解是否接收到其中一个信号。