Sèrie RHCSA: gestió de processos a RHEL 7: arrencada, tancament i tot el que hi ha entre: part 5


Començarem aquest article amb una revisió general i breu del que passa des del moment en què premeu el botó d'engegada per encendre el vostre servidor RHEL 7 fins que se us presenta la pantalla d'inici de sessió en una interfície de línia d'ordres.

Tingueu en compte que:

1. els mateixos principis bàsics s'apliquen, amb modificacions potser menors, també a altres distribucions de Linux, i
2. La descripció següent no pretén representar una explicació exhaustiva del procés d'arrencada, sinó només els fonaments.

Procés d'arrencada de Linux

1. El POST (Power On Self Test) s'inicializa i realitza comprovacions de maquinari.

2. Quan finalitza la POST, el control del sistema es passa al carregador d'arrencada de la primera etapa, que s'emmagatzema al sector d'arrencada d'un dels discs durs (per a sistemes antics que utilitzen BIOS i MBR) o un (U)EFI dedicat. partició.

3. El carregador d'arrencada de la primera etapa carrega llavors el carregador d'arrencada de la segona etapa, normalment GRUB (GRand Unified Boot Loader), que resideix dins de /boot, que al seu torn carrega el nucli i el sistema de fitxers basat en RAM inicial (també conegut com initramfs). , que conté programes i fitxers binaris que realitzen les accions necessàries necessàries per muntar finalment el sistema de fitxers arrel real).

4. Se'ns presenta una pantalla de presentació que ens permet triar un sistema operatiu i un nucli per arrencar:

5. El nucli configura el maquinari connectat al sistema i un cop muntat el sistema de fitxers arrel, inicia el procés amb PID 1, que al seu torn inicialitzarà altres processos i ens presentarà un missatge d'inici de sessió.

Nota: si ho volem fer més endavant, podem examinar les especificitats d'aquest procés mitjançant l'ordre dmesg i filtrant la seva sortida mitjançant les eines que hem explicat en articles anteriors d'aquesta sèrie.

A l'exemple anterior, hem utilitzat la coneguda comanda ps per mostrar una llista de processos actuals el procés principal dels quals (o, en altres paraules, el procés que els va iniciar) és systemd (el gestor de sistemes i serveis que la majoria de distribucions de Linux modernes han canviat). a) durant l'inici del sistema:

# ps -o ppid,pid,uname,comm --ppid=1

Recordeu que la bandera -o (abreviatura de –format) us permet presentar la sortida de ps en un format personalitzat per adaptar-vos a les vostres necessitats utilitzant les paraules clau especificades a la secció ESPECIFICADORS DE FORMAT ESTÀNDARD a man ps.

Un altre cas en què voldreu definir la sortida de ps en lloc d'anar amb el valor predeterminat és quan necessiteu trobar processos que estan causant una càrrega important de CPU i/o memòria i ordenar-los en conseqüència:

# ps aux --sort=+pcpu              # Sort by %CPU (ascending)
# ps aux --sort=-pcpu              # Sort by %CPU (descending)
# ps aux --sort=+pmem              # Sort by %MEM (ascending)
# ps aux --sort=-pmem              # Sort by %MEM (descending)
# ps aux --sort=+pcpu,-pmem        # Combine sort by %CPU (ascending) and %MEM (descending)

Una introducció a SystemD

Poques decisions al món Linux han causat més controvèrsies que l'adopció de systemd per les principals distribucions de Linux. Els defensors de Systemd posen com a avantatges principals els fets següents:

Llegiu també: La història darrere d'init i systemd

1. Systemd permet fer més processaments en paral·lel durant l'inici del sistema (a diferència del SysVinit més antic, que sempre acostuma a ser més lent perquè inicia els processos un per un, comprova si un depèn d'un altre i, a continuació, espera que els dimonis s'iniciïn així). poden començar més serveis), i

2. Funciona com una gestió dinàmica de recursos en un sistema en funcionament. Així, els serveis s'inicien quan cal (per evitar consumir recursos del sistema si no s'estan utilitzant) en lloc de llançar-se sense un motiu vàlid durant l'arrencada.

3. Compatibilitat enrere amb scripts SysVinit.

Systemd està controlat per la utilitat systemctl. Si veniu d'un fons SysVinit, és probable que conegueu:

  1. l'eina de servei, que -en aquells sistemes més antics- s'utilitzava per gestionar els scripts de SysVinit i
  2. la utilitat chkconfig, que tenia el propòsit d'actualitzar i consultar informació de nivell d'execució per als serveis del sistema.
  3. apagada, que heu d'haver utilitzat diverses vegades per reiniciar o aturar un sistema en execució.

La taula següent mostra les similituds entre l'ús d'aquestes eines heretades i systemctl:

Systemd també va introduir els conceptes d'unitats (que poden ser un servei, un punt de muntatge, un dispositiu o un sòcol de xarxa) i els objectius (és com Systemd aconsegueix iniciar diversos processos relacionats al mateix temps, i es pot considerar: encara que no és igual, com l'equivalent dels nivells d'execució en sistemes basats en SysVinit.

Resumint

Altres tasques relacionades amb la gestió de processos inclouen, entre d'altres, la capacitat de:

Això s'aconsegueix mitjançant la utilitat renice, que altera la prioritat de programació d'un o més processos en execució. En termes senzills, la prioritat de programació és una característica que permet al nucli (present en versions => 2.6) assignar recursos del sistema segons la prioritat d'execució assignada (també conegut com a bondat, en un rang de -20 a 19) d'un procés determinat.

La sintaxi bàsica de renice és la següent:

# renice [-n] priority [-gpu] identifier

A l'ordre genèrica anterior, el primer argument és el valor de prioritat que s'ha d'utilitzar, mentre que l'altre argument es pot interpretar com a ID de procés (que és la configuració predeterminada), ID de grup de processos, ID d'usuari o noms d'usuari. Un usuari normal (que no sigui root) només pot modificar la prioritat de programació d'un procés que és propietari i només augmentar el nivell d'amabilitat (la qual cosa significa ocupar menys recursos del sistema).

En termes més precisos, matar un procés dóna dret a enviar-li un senyal per acabar la seva execució amb gràcia (SIGTERM=15) o immediatament (SIGKILL=9) mitjançant les ordres kill o pkill.

La diferència entre aquestes dues eines és que la primera s'utilitza per finalitzar un procés específic o un grup de processos, mentre que la segona us permet fer el mateix en funció del nom i altres atributs.

A més, pkill ve inclòs amb pgrep, que us mostra els PID que es veuran afectats si s'utilitza pkill. Per exemple, abans de córrer:

# pkill -u gacanepa

Pot ser útil veure d'un cop d'ull quins són els PID propietat de gacanepa:

# pgrep -l -u gacanepa

Per defecte, tant kill com pkill envien el senyal SIGTERM al procés. Com hem esmentat anteriorment, aquest senyal es pot ignorar (mentre el procés s'acaba d'executar o definitivament), de manera que quan necessiteu aturar un procés en execució amb un motiu vàlid, haureu d'especificar el senyal SIGKILL a la línia d'ordres:

# kill -9 identifier               # Kill a process or a process group
# kill -s SIGNAL identifier        # Idem
# pkill -s SIGNAL identifier       # Kill a process by name or other attributes 

Conclusió

En aquest article hem explicat els conceptes bàsics del procés d'arrencada en un sistema RHEL 7 i hem analitzat algunes de les eines disponibles per ajudar-vos a gestionar processos mitjançant utilitats comunes i ordres específiques del sistema.

Tingueu en compte que aquesta llista no pretén cobrir totes les campanes i xiulets d'aquest tema, així que no dubteu a afegir les vostres eines i ordres preferides a aquest article utilitzant el formulari de comentaris a continuació. Les preguntes i altres comentaris també són benvinguts.