Pe serverele mele Ubuntu 20.04LTS am o sarcină cron pentru ștergerea versiunilor vechi de kernel pentru a preveni ca partițiile lor /boot să rămână fără spațiu. Funcționează interogând cu dpkg-query
pentru lista de instalate imagine linux
pachete și apoi hrănirea tuturor, cu excepția ultimelor trei dintre acestea apt-get purge -y
. Acest lucru funcționează bine de cele mai multe ori.
Din când în când, din diverse motive, acest proces va selecta nucleul care rulează în prezent pentru eliminare.
Aceasta nu ar trebui să fie o problemă, deoarece conform paginii sale de manual, apt-get
cu
cel -y
opțiunea ar trebui să se anuleze în acest caz.
În realitate, totuși, acest lucru face ca jobul cron să se blocheze la infinit.
Ieșirea standard din job, care este capturată într-un fișier, arată:
Se elimină linux-image-5.4.0-100-generic (5.4.0-100.113)...
debconf: imposibil de inițializat frontend: Dialog
debconf: (TERM nu este setat, astfel încât interfața de dialog nu este utilizabilă.)
debconf: revenirea la frontend: Readline
Eliminarea linux-image-5.4.0-100-generic
--------------------------------------
Rulați un nucleu (versiunea 5.4.0-100-generic) și încercați să eliminați
aceeași versiune.
Acest lucru poate face ca sistemul să nu poată porni, deoarece va fi eliminat
/boot/vmlinuz-5.4.0-100-generic și toate modulele din director
/lib/modules/5.4.0-100-generic. Acest lucru poate fi remediat doar cu o copie a nucleului
imaginea și modulele corespunzătoare.
Este foarte recomandat să renunțați la eliminarea nucleului, dacă nu sunteți pregătit
reparați sistemul după îndepărtare.
Renunțați la eliminarea nucleului? [da nu]
Arborele de proces (decupat din ps -axf
) arata asa:
828 ? Ss 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 -generic:amd64 linux-modules-extra-5.4.0-100-generic:amd64 linux-image-5.4.0-100-generic:amd64
92798 pts/0 S+ 0:00 \_ /bin/sh /var/lib/dpkg/info/linux-image-5.4.0-100-generic.prerm elimina
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 puncte/0 S+ 0:00 \_ /usr/bin/perl /usr/bin/linux-check-removal 5.4.0-100-generic
Asa de apt-get
a emis o cerere de confirmare în ciuda faptului că -y
opțiune.
Mai rău, chiar a observat că nu are un mijloc pentru a ajunge efectiv la cineva pentru un răspuns, dar în loc să renunțe cu înțelepciune, a creat un pseudoterminal din aer și acum așteaptă fără sens să apară un răspuns acolo.
Cum pot evita acest comportament și cum pot preveni în mod fiabil apt-get
de a pune întrebări atunci când rulați fără terminal?