Сразу после установки, как правило, любая операционная система будет работать очень хорошо и быстро. Но со временем ошибки могут накапливаться и вызывать различные проблемы с использованием ОС.
В сегодняшней статье мы рассмотрим такую ошибку, как "не выключается Linux". Разберём, почему может возникнуть такая проблема, методы её отладки и исправления.
Содержание статьи
Почему не выключается компьютер Linux?
Инициализацией и завершением работы сервисов в системе Linux занимается system, и если компьютер не может выключиться, это означает, что systemd не может справиться с каким-либо процессом и ждёт его завершения. По умолчанию система даёт каждому сервису одну минуту и тридцать секунд, а затем отправляет сигнал экстренного завершения. Но таких сервисов может быть несколько, и завершение работы Linux может затянуться.
Есть несколько путей решения этой проблемы:
- Во первых, нам необходимо понять в чём именно проблема, какой сервис её вызывает и попытаться её решить;
- Во вторых, мы можем уменьшить время ожидания от 90 до пяти секунд, для большинства сервисов этого будет вполне достаточно.
А теперь давайте рассмотрим пути решения проблемы.
Как исправить ошибку "не выключается Linux"
Чтобы понять, почему система не может выключиться, нам сначала необходимо посмотреть лог её выключения. И тут у нас тоже есть два пути: либо отключить заставку и выводить лог в реальном времени, либо записывать лог выключения с помощью journalctl.
1. Лог выключения в реальном времени
Первый способ не настолько информативный, но всё же может быть полезным. Для отключения заставки откройте /etc/default/grub и в строке GRUB_CMDLINE_LINUX_DEFAULT замените слова quiet splash на verbose:
$ vi /etc/default/grub
Выполите:
sudo update-grub
Затем перезагрузите компьютер. Сначала вы будете видеть полный лог загрузки, а при выключении вы увидите полный лог выключения. Преимущество этого пути в том, что вы увидите, на какой команде загрузка зависает, и сможете понять, куда копать дальше. Например, часто бывает, что Linux не может выключиться из-за ошибки "a stop job is running for Session c2 of user", т.е. мы не можем завершить сессию пользователя. Ещё выключению могут препятствовать примонтированные удалённые файловые системы.
2. Лог выключения в journalctl
Утилита journalctl занимается обработкой логов в Linux, но есть одна проблема: она записывает журналы только из текущей сессии, при перезагрузке всё стирается. Но это можно исправить. Для этого окройте конфигурационный файл /etc/systemd/journald.conf и замените в нём значение строки Storage=auto на Storage=persistent:
vi /etc/systemd/journald.conf
Затем два раза перезапустите компьютер. Первый раз мы перезапускаем, чтобы настройки логирования вступили в силу, а второй, чтобы собрать лог последнего выключения Linux. После того, как загрузка завершиться, вы можете посмотреть лог с помощью такой команды:
sudo journalctl -b -1 -n300
Опция -b позволяет вывести лог загрузки, -1 говорит, что нужно брать не текущую загрузку, а предыдущую, а -n300 отображает только последние 300 строк. Здесь вы можете видеть, что по таймауту была завершена именно сессия session-c1. Мы можем отфильтровать сообщения только по ней:
sudo journalctl -b -1 -u session-c1.scope
Если вы увидели ошибку и смогли её решить, то ваша система будет выключаться уже мгновенно, если же нет, то всё ещё есть несколько путей решения.
3. Настройка таймаутов в systemd
Если никакое из предыдущих решение не помогло, и в системе просто баг, который не позволяет ей адекватно выключиться, то вы всё ещё можете уменьшить время ожидания до того, как процессу будет отправлен сигнал экстренного завершения. Для этого откройте файл /etc/systemd/system.conf и добавьте туда такие строки:
sudo vi /etc/systemd/system.conf
Теперь система будет ждать только 5 секунд перед тем, как завершить проблемный процесс. Также на некоторых форумах рекомендуют установить сервис watchdog, чтобы он следил за правильностью работы системного таймера. Это тоже делается очень просто:
sudo apt install watchdog
sudo systemctl enable watchdog
sudo systemctl start watchdog
Выводы
Может быть огромное количество причин, по которым ваша система не сможет включиться, и чтобы их найти и исправить, необходимо анализировать логи, искать по форумах и настраивать свою систему. Надеюсь, информация из этой статьи сделает вашу работу в Linux более комфортной.
Если правильно помню, watchdog предназначен для перезагрузки зависшего железа
то есть аппаратный watchdog получает от ПК каждые Х секунд сообщение и сбрасывает свой таймер
Если в течении определенного времени этот самый встроенный таймер не сбросить, компьютер считался зависшим и перезагружал ПК
Да, только этот работает немного по другому:
After watchdog starts, it puts itself into the background and then tries all checks specified in its configuration file in turn. Between each two tests it will write to the kernel device to prevent a reset. After finishing all tests watchdog goes to sleep for some time. The kernel drivers expects a write to the watchdog device every minute. Otherwise the system will be reset. As a default watchdog will sleep for only 1 second so it triggers the device early enough.
Спасибо, полезная статья.
" замените в нём значение строки Storage=auto на Storage=persistent:" - т.е. лог будет постоянно копиться там, даже посое перезагрузок? Например, я бы хотел оставить persistent чтобы постоянно конотролировать работу сервера. Но тогда лог будет расти постоянно? Если да, то можно ли настроить ротацию? Например, чтобы после 30 дней удалялись самые старые логи чтобы заменить их новыми.
Крон со скриптом тебе в помощь.
Настройте соответствующим образом logrotate в
/etc/logrotate.d/
, это не сложно, google даёт море информации по теме.Печально когда не включается, а это терпимо)
Если не выключается, то проще некуда нажать Ctrl+Alt+PrtScr+O
На ext4 или xfs это безболезненно. Для мнительных можно перед этим анмаунтить и синхронизировать также меджек кей хотами.
А не выключаться может и например если ПК по сети работают с какой нибудь базой данных и комп с базой уже выключили например, а другие ПК все пытаются до него достучаться. У меня такое бывает, когда сервер с самописными бд-програмками гасят первым.
С Linux тьфу-тьфу таких проблем никогда не было. А вот с Windows 10 после обновления уже который раз )
У меня сейчас подобная проблема, я уже какой месяц не могу решить данную проблему. В логах системеых пишет что произашел шатдаун. Но комп не выключается. Выглядит так, как будто система выключилась но комп не выключила. Происходит зависание скрина что перед выключением отображается. Может ли быть проблема в железе?
аналогичная проблема. Удалось победить?
Linux не может выключиться из-за ошибки "a stop job is running for Session c2 of user", помогите пожалуйста. уже не знаю что делать
Воспользовался третим способом, как сохранить изменеия???
Чтобы изменения настроек таймаута применились, один раз систему всё же придется перезапустить вручную.
Ноут старенький - Aser TravelMate 2410. Стоит Ubuntu MATE 18.04
После выключения пишет: Starting Power-Off...
но выключается после этого только кнопкой питания. При попытке перезагрузить ситуация похожая, только надпись немного другая. Что делать? На Windows все работало нормально.
Доброго дня . У меня ситуация следующая. На спец компе установлен Линукс и поверх спецприложение. Могу зайти только в биос или спецприложение. Неисправность проявляется как зависание компа после нажатия кнопки выкл. Предпологаю что нужно смотреть логи как описано в статье выше. В каких папках эти логи можно посмотреть подключая хард от спец компа через адаптор к ноуту с установленным линукс.?
На Arch (xfce4). Появилась такая проблемка. После ремонта сети инет (в доме) комп перестал выключаться. Выключить конечно можно, если вытащить инет кабель. Но если в течении 2 минут подключить кабель обратно (при выключеном ПК), комп автоматически запускается. Причём проблема именно на arch, на другом диске стоит АркоЛинукс, так вот там всё работает. ВЫКЛЮЧИТЬ - выключает.