101.3 - Alternar runlevels/boot targets, desligar e reiniciar o sistema
Peso: 3
Áreas chaves de conhecimento
Section titled “Áreas chaves de conhecimento”- Definir o runlevel padrão e o target de boot padrão.
- Alternar entre runlevels/targets de boot, incluindo o modo single user (usuário único).
- Desligar e reiniciar através da linha de comando.
- Alertar os usuários antes de mudar o runlevel/target de boot ou outro evento de sistema que acarrete uma mudança significativa.
- Terminar apropriadamente os processos.
- Noções de acpid.
Lista parcial de arquivos, termos e utilitários utilizados
Section titled “Lista parcial de arquivos, termos e utilitários utilizados”/etc/inittabshutdowninit/etc/init.d/telinitsystemdsystemctl/etc/systemd/usr/lib/systemdwall
Daemons
Section titled “Daemons”O Linux, seguindo a filosofia Unix, usa processos separados (daemons/serviços) para controlar funções distintas do sistema — servidor HTTP, banco de dados, firewall, etc. O conjunto de daemons ativos precisa ser gerenciável em tempo de execução, sem reiniciar o sistema. Para isso existem os gerenciadores de serviços, e este capítulo cobre três deles: SysVinit, systemd e o Upstart.
SysVinit
Section titled “SysVinit”O SysVinit (os somente SysV) introduz o conceito de execução (runlevels), numerados de 0 a 6:
| Nível | Finalidade |
|---|---|
| 0 | Encerramento do sistema |
| 1/s/single | Modo single-user - manutenção, sem rede |
| 2,3,4 | Modo multiusuário (3 e 4 com rede; 2 raramente usado) |
| 5 | Modo multiusuário com interface gráfica |
| 6 | Reinicialização do sistema |
O programa responsável pelo gerenciamento de níveis de execução e daemons associados é /sbin/init. Durante a inicialização do sistema, o init identifica o nível de execução solicitado, definido por parâmetro do kernel ou no arquivo /etc/inittab. Cada nível de execução pode ter diversos arquivos de serviços associados, geralmente scripts no diretório /etc/init.d/.
Arquivo /etc/inittab/
Section titled “Arquivo /etc/inittab/”O arquivo /etc/inittab/ define o padrão e o que executar em cada estado.
id:runlevels:action:processPrincipais actions
sysinit: Executa na inicialização, qualquer que seja o runlevel.wait: Executa no runlevel dado e o init espera terminar.respawn: Reinicia o processo se ele morrer.ctrlaltdet: Executa quando Ctrl+Alt+Del é pressionado.
O runlevel padrão é definido pela entrada id:x:initdefault: e nunca deve ser 0 ou 6.
Exemplo de um arquivo /etc/inittab:
# Runlevel padrão do sistema. O campo process da linha initdefault fica vazio, só o número do runlevel importa.# Runlevel padrão nunca pode ser 0 ou 6 (desligar/reiniciar infinitamente).id:3:initdefault:
# Script de configuração executado durante o bootsi::sysinit:/etc/init.d/rcS
# Ação ao entrar no runlevel S (usuário único)~:S:wait:/sbin/sulogin
# Configuração para cada nível de execuçãol0:0:wait:/etc/init.d/rc 0l1:1:wait:/etc/init.d/rc 1l2:2:wait:/etc/init.d/rc 2l3:3:wait:/etc/init.d/rc 3l4:4:wait:/etc/init.d/rc 4l5:5:wait:/etc/init.d/rc 5l6:6:wait:/etc/init.d/rc 6
# Ação ao pressionar Ctrl+Alt+Delca::ctrlaltdel:/sbin/shutdown -r now
# Terminais virtuais habilitados nos runlevels 2 e 31:23:respawn:/sbin/getty tty1 VC linux2:23:respawn:/sbin/getty tty2 VC linux3:23:respawn:/sbin/getty tty3 VC linux4:23:respawn:/sbin/getty tty4 VC linux
# No runlevel 3, também habilita terminais seriaisS0:3:respawn:/sbin/getty -L 9600 ttyS0 vt320S1:3:respawn:/sbin/mgetty -x0 -D ttyS1Após qualquer edição no /etc/inittab, é obrigatório rodar telinit q para recarregar a configuração sem reiniciar o sistema.
Scripts dos runlevels
Section titled “Scripts dos runlevels”Os scripts usados pelo init ficam em /etc/init.d/.
- Cada runlevel tem um diretório
/etc/rc0.d/,/etc/rc1.d/, etc. - Os arquivos nesses diretórios são links simbólicos para scripts em
/etc/init.d/. - Nomes de scripts que começam com
Ksão serviços parados (Killed) ao entrar no runlevel. - Nomes de scripts que começam com
Ssão serviços iniciados (Started) ao entrar no runlevel.
Comandos do SysV
Section titled “Comandos do SysV”runlevel # mostra o runlevel atualtelinit 3 # alterna para runlevel 3telinit q # recarrega /etc/inittab após modificá-lotelinit 6 # reinicia o sistematelinit 0 # desliga o sistemasystemd
Section titled “systemd”Atualmente, o systemd substitui o SysV na maioria das distribuições. Em vez de runlevels, ele usa units e targets.
Units são recursos gerenciáveis pelo systemd. Tipos principais:
| Tipo | Descrição |
|---|---|
service | Serviços que podem ser iniciados, parados e recarregados. |
socket | Socket de sistemas de arquivos ou de rede. |
device | Dispositivo de hardware reconhecido pelo kernel. |
mount | Ponto de montagem no sistema de arquivos. |
automount | Ponto de montagem automático. |
target | Agrupamento de unidades (equivale aos runlevels do SysVinit). |
snapshot | Estado salvo do systemd. |
Os arquivos de configuração ficam em /etc/systemd/system.
Correspondência entre targets e runlevels:
| SysVinit Runlevel | systemd Target |
|---|---|
| 0 | poweroff.target |
| 1 | rescue.target |
| 3 | multi-user.target |
| 5 | graphical.target |
| 6 | reboot.target |
O target padrão é definido pelo link simbólico /etc/systemd/system/default.target.
Nota:
/sbin/initnos sistemas com systemd é apenas um link simbólico para/lib/systemd/systemd. O PID 1 continua sendo o init, mas agora é o systemd.
Comando systemctl
Section titled “Comando systemctl”O comando systemctl é utilizado para controlar as units do systemd. Este comando é usado para executar as tarefas relacionadas à ativação, desativação, execução, interrupção e monitoramento da unit.
Comandos systemctl essenciais:
# Gerenciar serviçossystemctl start sshd.servicesystemctl stop sshd.servicesystemctl restart sshd.servicesystemctl status sshd.servicesystemctl is-active sshd.service
# Habilitar/desabilitar na inicializaçãosystemctl enable sshd.servicesystemctl disable sshd.service
# Alternar entre targetssystemctl isolate multi-user.target
# Definir e consultar target padrãosystemctl set-default graphical.targetsystemctl get-default
# Listar unitssystemctl list-unit-files --type=servicesystemctl list-units --type=target
# Desligar/reiniciarsystemctl rebootsystemctl poweroffsystemctl suspendUpstart
Section titled “Upstart”Desenvolvido para o Ubuntu para paralelizar a inicialização dos serviços. O Ubuntu migrou para o systemd em 2015.
Os scripts de inicialização usados pelo Upstart estão localizados no diretório /etc/init/. Os serviços do sistema podem ser listados com o comando initctl list, que também mostra o estado atual dos serviços e, se disponível, seu número PID.
initctl list # lista os serviços do sistemaavahi-cups-reload stop/waitingavahi-daemon start/running, process 1123mountall-net stop/waitingmountnfs-bootclean.sh start/runningnmbd start/running, process 3085passwd stop/waitingrc stop/waitingrsyslog start/running, process 1095tty4 start/running, process 1761udev start/running, process 1073upstart-udev-bridge start/running, process 1066console-setup stop/waitingirqbalance start/running, process 1842plymouth-log stop/waitingsmbd start/running, process 1457tty5 start/running, process 1764failsafe stop/waitingOutros comandos relevantes do Upstart:
start tty6 # inicia um recursostop tty6 # para um recursostatus tty6 # verifica o estadoinitctl list # lista todos os jobsDesligar e reiniciar
Section titled “Desligar e reiniciar”O comando shutdown é um comando muito tradicional usado para desligar ou reiniciar o sistema. Ele funciona no SysV e no systemd.
Exemplos:
shutdown -h now # desliga imediatamenteshutdown -r +10 # reinicia em 10 minutosshutdown -h 22:00 "Manutenção noturna" # Envia mensagem a todos os usuário logadosshutdown -c # cancela um shutdown agendado-h: halt (desliga)-r: reboot (reinicia)- sem opção: vai para o modo single user (usuário único).
Antes de desligar, o shutdown envia SIGTERM a todos os processos, depois SIGKILL.
Comando wall
Section titled “Comando wall”O comando wall pode enviar uma mensagem para as sessões de terminal de todos os usuários logados. Para isso, o administrador do sistema só precisa fornecer um arquivo ou escrever diretamente a mensagem como um parâmetro.
Exemplo:
wall "O sistema será reiniciado em 5 minutos"