На моих серверах Ubuntu 20.04LTS у меня есть задание cron для удаления старых версий ядра, чтобы предотвратить нехватку места в их /boot-разделах. Он работает, запрашивая с dpkg-запрос
для списка установленных linux-образ
пакеты, а затем подача всех, кроме последних трех, в apt-получить очистку -y
. Это хорошо работает большую часть времени.
Время от времени по разным причинам этот процесс выбирает для удаления работающее в данный момент ядро.
Это не должно быть проблемой, так как, согласно его справочной странице, способный получить
с
в -у
опция должна просто прерваться в этом случае.
Однако на самом деле это приводит к тому, что задание cron зависает на неопределенный срок.
Стандартный вывод задания, записанный в файл, показывает:
Удаление linux-image-5.4.0-100-generic (5.4.0-100.113)...
debconf: невозможно инициализировать внешний интерфейс: диалоговое окно
debconf: (TERM не установлен, поэтому диалоговое окно использовать нельзя.)
debconf: откат к внешнему интерфейсу: Readline
Удаление linux-image-5.4.0-100-generic
--------------------------------------
Вы используете ядро (версия 5.4.0-100-generic) и пытаетесь удалить
та же версия.
Это может привести к невозможности загрузки системы, поскольку она удалит
/boot/vmlinuz-5.4.0-100-generic и все модули в каталоге
/lib/modules/5.4.0-100-универсальный. Это можно исправить только копией ядра
изображение и соответствующие модули.
Настоятельно рекомендуется прервать удаление ядра, если вы не готовы
исправить систему после удаления.
Прервать удаление ядра? [да нет]
Дерево процессов (вырезано из пс -ахф
) выглядит так:
828 ? Сс 0:00 /usr/sbin/cron -f
92591 ? S 0:00 \_ /usr/sbin/CRON -f
92592 ? Ss 0:00 \_ /bin/sh -c /usr/local/sbin/remove_old_kernels.sh >> /var/log/remove_old_kernels.log 2>&1
92593 ? S 0:00 \_ /bin/bash /usr/local/sbin/remove_old_kernels.sh
92598 ? S 0:14 \_ apt-get purge -y linux-image-5.4.0-100-generic
92785 pts/0 Ss+ 0:00 \_ /usr/bin/dpkg --status-fd 26 --no-triggers --force-depends --abort-after=1 --remove linux-generic:amd64 linux-image -общий:amd64 linux-modules-extra-5.4.0-100-общий:amd64 linux-image-5.4.0-100-общий:amd64
92798 pts/0 S+ 0:00 \_ /bin/sh /var/lib/dpkg/info/linux-image-5.4.0-100-generic.prerm удалить
92799 pts/0 S+ 0:00 \_ /usr/bin/perl -w /usr/share/debconf/frontend /usr/bin/linux-check-removal 5.4.0-100-generic
92809 баллов/0 S+ 0:00 \_ /usr/bin/perl /usr/bin/linux-check-removal 5.4.0-100-generic
Так способный получить
отправил запрос на подтверждение, несмотря на -у
вариант.
Хуже того, он даже заметил, что у него нет средств, чтобы на самом деле связаться с кем-либо за ответом, но вместо того, чтобы благоразумно отказаться, он создал псевдотерминал из воздуха и теперь бессмысленно ждет, когда ответ появится там.
Как я могу избежать такого поведения и надежно предотвратить способный получить
от задавать какие-либо вопросы при запуске без терминала?