Вопрос или проблема
Когда я выключаю свой Debian Stretch (9), скорее всего, я вижу что-то вроде:
У меня есть несколько вопросов:
1) Кажется, это ошибка, которая еще не была решена (она существует уже несколько лет). Под “ошибкой” я имею в виду, что Linux должен выключаться быстрее, чем Windows; если это не так, то это ошибка.
2) Поскольку эту ошибку, похоже, трудно изолировать и решить, возможно, “Esc для отмены” решит большую часть проблемы.
3) У меня есть опыт программирования, но не с ядром Linux и подобным. Рекомендуется ли мне попробовать вставить “Esc для отмены” самостоятельно? Если да, то какой файл мне следует изменить? Могу ли я скомпилировать только этот файл или что-то большее?
ИЗМЕНЕНИЕ
Содержимое /etc/gdm3/daemon.conf
# Хранилище конфигурации GDM
#
# См. /usr/share/gdm/gdm.schemas для списка доступных опций.
[daemon]
# Уберите комментарий на строке ниже, чтобы заставить экран входа использовать Xorg
#WaylandEnable=false
# Включение автоматического входа
# AutomaticLoginEnable = true
# AutomaticLogin = user1
# Включение временного входа
# TimedLoginEnable = true
# TimedLogin = user1
# TimedLoginDelay = 10
[security]
[xdmcp]
[chooser]
[debug]
# Уберите комментарий на строке ниже, чтобы включить отладку
# Более подробные логи
# Кроме того, позволяет X-серверу завершить работу, если он зависнет
#Enable=true
Настоящее решение заключается в том, чтобы выяснить, какой процесс все еще работает и почему. Проще сказать, чем сделать! В моей системе выполнялась (и никогда не завершалась) задача “fsck” на внешнем диске объемом 2 ТБ, подключенном по USB 2.0, который имел повреждение файловой системы из-за плохих секторов. Неудивительно, что она не могла завершиться! К счастью, единственные данные, к которым я не мог получить доступ, были в папке, которая мне не была нужна. После того как я скопировал все остальные данные, я отформатировал этот диск, этот симптом исчез, и мои отключения снова стали быстрыми.
На самом деле это не ошибка, Linux просто проявляет терпение, ожидая до 1 минуты 30 секунд, пока программа не завершится.
Проверьте, не выполняли ли вы какой-либо процесс в фоновом режиме, который игнорирует SIGTERM. Скорее всего, вы запустили его сами или каким-то образом запланировали. (Эта проблема не должна возникать на только что установленных дистрибутивах.)
Чтобы исправить ситуацию, найдите способ запустить процесс как системную службу, которая поддерживает действие запуска/остановки.
Ответ или решение
Чтобы решить проблему с сообщением "A stop job is running" при выключении Debian 9 (Stretch), необходимо уделить внимание нескольким аспектам, так как это не совсем "баг", а скорее нормальное поведение системы для обеспечения корректного завершения запущенных процессов. В данном ответе мы обсудим возможные причины, решения и рекомендации.
1. Определение источника проблемы
Как упоминалось в вопросе, важно выяснить, какие процессы тормозят завершение работы системы. Для этого можно выполнить следующие шаги:
-
Просмотр запущенных процессов: В командной строке используйте команду
ps aux
, чтобы увидеть, какие процессы работают в текущий момент. Обратите внимание на процессы, которые могут блокировать завершение системы. -
Логи системы: Просмотрите файлы журналов, находящиеся по пути
/var/log/syslog
илиjournalctl
, чтобы обнаружить возможные ошибки и узнать, какие именно процессы вызывают задержку.
2. Закрытие процессов, блокирующих завершение работы
Если вы обнаружили, что какой-то процесс (например, fsck
для внешнего диска или другие пользовательские приложения) тормозит отключение, попробуйте следующие действия:
-
Завершение процесса вручную: Используйте команду
kill
илиkillall
, чтобы принудительно завершить проблемные процессы. Для этого удобно использоватьpkill <имя_процесса>
. -
Настройка системного сервиса: Если возможно, переведите приложения, которые запускаются при загрузке в фоновый режим, в службу systemd. Это позволит легко управлять их запуском и остановкой.
3. Увеличение времени ожидания
Если вы столкнулись с ситуацией, когда система ожидает завершения процесса в течение 90 секунд, и это происходит часто, можно рассмотреть возможность увеличения времени ожидания. Для этого откройте файл массива служб systemd
, выполнив команду:
sudo systemctl edit <имя_сервиса>
Затем добавьте следующее:
[Service]
TimeoutStopSec=120
4. Задание Esc для отмены ожидания
Идея о том, чтобы добавить возможность отмены длительных ожиданий с помощью нажатия клавиши Esc — интересная. Однако, такие изменения требуют знаний о работе системных служб и могут затронуть код ядра, что не рекомендуется для новичков. Вместо этого, рекомендую сосредоточиться на устранении источника проблемы, так как это приведет к более устойчивому решению.
5. Итоговые рекомендации
-
Проверьте наличие фоновых задач: Убедитесь, что никакие фоновые задачи, которые могли бы не прерываться должным образом, не мешают завершению системы.
-
Очищайте внешние устройства: Если у вас есть внешние устройства, отключите их перед выключением, чтобы избежать зависания.
-
Регулярно обновляйте систему: Следите за обновлениями вашего Debian, так как проблемы подобного рода могут быть исправлены в новых версиях.
После выполнения этих шагов вы должны заметить улучшения в быстродействии отключения вашей системы Debian 9. Если проблема остается, возможно, стоит обратиться к сообществу поддержки Debian для получения дополнительной помощи.