Как вы перезагружаете свой 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.
Возвращаясь к изначальной теме. У кого-нибудь есть точная информация на этот счёт? Есть ли ещё где-то разница между этими командами?
#linux