Как вы перезагружаете свой Linux

Есть несколько способов перезагрузить систему Linux. Чаще всего используются 2 из них: консольные утилиты shutdown или reboot.

# shutdown -r now

# reboot

На первый взгляд они выполняют идентичное действие. Тогда не понятно, зачем печатать больше, если можно печатать меньше. Есть старое мнение, что эти команды работают по-разному. И тянется это с BSD систем. Насколько мне известно, как минимум в Linux это уже не так. C переходом на systemd, обе эти команды всего лишь символьные ссылки на /bin/systemctl и в этом легко убедиться.

# ls -l /usr/sbin/reboot

/usr/sbin/reboot → /bin/systemctl

# ls -l /usr/sbin/shutdown

/usr/sbin/shutdown → /bin/systemctl

Я же раньше слышал мнение, что shutdown сначала останавливает все запущенные процессы, ждёт их завершения, размонтирует все файловые системы и только после этого отдаёт команду ядру на выключение. А команда reboot сразу отправляет SIGKILL всем процессам для их немедленного завершения, ничего не дожидается и перезагружает систему. Её стоит использовать, когда обычный shutdown по какой-то причине не может перезагрузить сервер. Для современных Linux дистрибутивов это неверное утверждение.

Лично я сейчас все сервера перезагружаю через reboot из-за того, что в этой команде меньше шансов ошибиться и поставить не тот аргумент или опечататься.

И shutdown, и reboot обращаются к бинарникам операционной системы. Если у вас какие-то проблемы с диском и не удаётся прочитать этот бинарник, то перезагрузка не состоится. Если запущена консоль, то можно через неё сразу передать команду на перезагрузку напрямую ядру:

# echo b > /proc/sysrq-trigger

Если же вы перед физической консолью сервера, то можно отправить команду через одну из комбинаций Linux Magic System Request Key - ALT-SysRq-b.