Puncte:-1

Preveniți în mod fiabil apt-get să ceară confirmare atunci când rulați din cron

drapel cn

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?

Artur Meinild avatar
drapel vn
Se pare că alegi o soluție inutilă pentru aceasta ([problema XY](https://xyproblem.info/)). Ubuntu 20.04 în mod implicit va elimina nucleele vechi, lăsând doar cele actuale și cele dintâi. Deci, cred că ar trebui să aflați de ce funcționalitatea implicită nu funcționează și să restaurați aceasta.
nobody avatar
drapel gh
Nu funcționează `sudo apt autoremove --purge`?
N0rbert avatar
drapel zw
Puneți `purge-old-kernels` din pachetul `byobu` la cron job în loc să scrieți lucruri periculoase care pot face sistemul de nebootat.
user535733 avatar
drapel cn
Se pare că logica cronjob-ului tău este problema. Treaba ta este să-i ceri lui apt să-ți spargă sistemul, iar apt este să recunoască destul de corect implicațiile catastrofale și să solicite astfel confirmarea unui om. Nu este o eroare de rezolvat... este o caracteristică de siguranță bine implementată a apt. Puteți evita blocarea pur și simplu nu cereți lui apt să vă spargă sistemul.
Tilman avatar
drapel cn
Am încercat luni de zile, în zadar, să funcționeze fie presupusul comportament standard, fie „apt autoremove”, fie „purge-old-kernels”, înainte de a recurge să-l construiesc pe al meu. Dar voi accepta cu plăcere un răspuns care oferă orice soluție care funcționează. Acestea fiind spuse, munca mea *nu* cere apt-get să-mi spargă sistemele, doar să se comporte așa cum este documentat pe pagina sa de manual.
nobody avatar
drapel gh
Ai instalat un mediu desktop?
user535733 avatar
drapel cn
Nu se comportă așa cum este documentat pare o eroare clară: vă rugăm să trimiteți un raport de eroare și vă mulțumim pentru descoperirea și raportarea erorii. Dincolo de asta, până când eroarea este rezolvată, munca ta nu ar trebui să depindă de comportamentul erorilor. Vă sugerez să testați mai întâi pentru a evita încercarea de a elimina nucleul care rulează în prezent.
Tilman avatar
drapel cn
@nobody: Fără mediu desktop.
PonJar avatar
drapel in
De ce să nu introduceți un test pentru a termina jobul dacă nucleul selectat este nucleul care rulează?
Tilman avatar
drapel cn
Asta ar funcționa în jurul acestui scenariu specific.Dar cum pot fi sigur că acesta este singurul scenariu în care `apt-get` poate bloca așteptarea intrării interactive atunci când rulează neinteractiv?
PonJar avatar
drapel in
Probabil că nu este singurul scenariu în care este necesară o intrare interactivă. Cu toate acestea, dacă nu s-a întâmplat încă, este probabil să fie rar. Orice proces poate întâlni ceva ce nu a fost anticipat. Trebuie doar să vă asigurați că știți când apare și să vă regândiți. Nu ar trebui să aveți nevoie deloc de acest script. O întrebare mai bună este cum preveniți această problemă în primul rând.
Tilman avatar
drapel cn
Da, iar dacă răspunsul (încă nemaiîntâlnit) la întrebarea mea inițială este „nu poți” (cum încep să bănuiesc), atunci înseamnă „nu folosi `apt` în cronjobs”.
PonJar avatar
drapel in
Dacă configurați upgrade-uri nesupravegheate, puteți specifica eliminarea nucleelor ​​neutilizate
Tilman avatar
drapel cn
Nu voi. Upgrade-urile trebuie aprobate printr-un proces de lansare în etape aici.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.