Я посылаю команду перезагрузки и выключения на свободный компьютер BSD. Однако я хочу проверить, будет ли этот компьютер действительно выключен или перезагружен (я посылаю эту команду с компьютера перезагрузки, и я хочу быть уверен, что если моя команда будет запущена), я не хочу пинговать и т.д., Есть ли какая-либо команда научиться этому?

РЕДАКТИРОВАТЬ 1: Я думаю, что я должен быть более ясным в моем вопросе. Из моего приложения java-сервера я посылаю одну из этих команд:

reboot // or any other command to reboot
shutdown -p now

Я вызываю эти команды в другой Java-программе на стороне клиента. Давайте подумаем сценарий перезагрузки. После того, как я отправил команду перезагрузки со стороны сервера, я хочу проверить, перезагрузится клиент или нет. Если я отправлю эхо-запрос после отправки этой команды перезагрузки, клиентская машина Free BSD может быть еще жива. Однако он может перезагрузиться через некоторое время. С другой стороны, после того, как я отправил команду перезагрузки, что-то может произойти плохо, и связь обрывается, и клиент может не получить эту команду перезагрузки.

Как я могу решить эту проблему (я не хочу, чтобы решение было на стороне Java). Сохраняет ли Free BSD сигналы перезагрузки или завершения работы где-то (чтобы знать, что машина будет перезагружена или выключена), и могу ли я запросить, что машина запланирует перезагрузку или сразу выключить?

РЕДАКТИРОВАТЬ 2: Сервер отправляет одну из этих команд клиенту (мой сервер и клиент закодированы на Java). Если я отправляю эхо-запрос после отправки, например, команды выключения, возможно, машина выключится, но все еще будет работать (возможно, через две секунды она выключится). Если я могу запросить у своего клиента, получил ли он команду выключения (или перезагрузки), даже если она еще жива, я приму, что OK, она выключится (или перезагрузится). Если я не могу получить ответ на свой запрос клиенту, это означает, что это не живой, поэтому я приму, что он выключен (или перезагрузка). Как я могу запросить мою машину таким образом?

4 ответа4

3

Если вы не используете старую систему x86 с ошибочным BIOS или систему, отличную от x86, с какой-либо ошибочной прошивкой, reboot всегда должна фактически перезагружаться, при условии, что у вас нет проблем с зависанием устройств или с ошибками драйверов / модулей ядра.

poweroff немного отличается. Это требует поддержки ACPI на машинах x86. Однако это должно быть проблемой только на старом оборудовании x86. У меня двойная материнская плата Pentium-II 533 МГц, которая имеет проблему, из-за которой, если включен ACPI, виден только 1 процессор. Отключение ACPI позволяет использовать оба процессора. Однако, так как ACPI не включен, poweroff не будет на самом деле отключение питания системы, а просто остановить его. Я считаю, что эта система будет с середины до конца 90-х годов. Я не могу представить, что это проблема относительно чего-то довольно недавнего.

На компьютерах, отличных от x86, система, вероятно, не выключит систему, если у вас нет конкретной поддержки ядра для этого процессора или платы.

И, конечно же, если ваше текущее работающее ядро не поддерживает ACPI, ваше ядро не может выключить компьютер.

Поэтому, вероятно, лучшее, что вы можете сделать, это проверить поддержку ACPI.

0

На бесплатном bsd он создает файл /var/run/nologin. Я проверяю, чтобы понять, получен один из этих сигналов или нет.

0

Помимо проверки связи, вы можете запустить демон (например, sshd - который, я полагаю, вы делаете, поскольку вы подключаетесь удаленно) на машине, и, если он не может подключиться, машина (предположительно) выключена.

0

ХОРОШО. Теперь я понимаю это следующим образом:

Java-приложение на клиенте отправляет команду reboot или shutdown -p now . Тогда соединение может быть разорвано, и вы задаетесь вопросом, завершается ли еще команда.

Ответ на завершение прост: да, он завершен. Я часто использовал выключение через несколько часов, затем выходил из системы, и сервер красиво выключался в указанное время.

То же самое должно произойти с shutdown -r , которая перезагружается.

Я не знаю, что происходит с /sbin/reboot . Я никогда не использовал это. Я подозреваю, что это все еще завершится, но я никогда не проверял это.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .