Existe uma maneira de executar um script específico com todos os comandos “halt” e “reboot” no Linux?

1

Eu preciso encontrar uma maneira de interceptar os comandos halt e reboot e executar ações diferentes por meio do shell script antes que os comandos halt e reboot sejam executados. Isso é possível sem escrever um módulo do kernel para isso?

Aqui está o cenário inteiro. Em um Raspberry Pi eu tenho algum hardware externo conectado aos pinos GPIO. Eu gostaria de notificar o referido hardware quando o Raspberry Pi:

  • Reinicia, pulsando um GPIO por um determinado período.
  • Está sendo desativado, reduzindo o GPIO permanentemente antes que a CPU seja realmente interrompida.

Eu já pensei em colocar um script em rc.d/ , mas não tenho idéia de como descobrir se o sistema está parando ou apenas reiniciando de dentro do script, quando ele está sendo executado.

Alguma opinião?

    
por Todor Todorov 04.04.2015 / 05:35

1 resposta

0

Esta é uma tarefa comum do Linux - você faria isso usando scripts em nível de execução. Esta página do Linux .com é uma ótima introdução.

Basicamente, existem 7 níveis de execução no Linux:

  • 0 - Parar
  • 1 - modo de usuário único
  • 2 - Modo multiusuário básico (sem rede)
  • 3 - Modo multiusuário completo (baseado em texto)
  • 4 - Não usado
  • 5 - Modo multiusuário completo (baseado em GUI)
  • 6 - Reinicializar

O comando halt define essencialmente o nível de execução do computador como 0. Quando isso acontece, todos os vários scripts de nível de execução 0 ocorrem. Você pode ver todos esses scripts fazendo um ls -l /etc/rc0.d/ .

Da mesma forma, o comando reboot define o nível de execução do computador como 6 e executará todos os scripts em /etc/rc6.d/ .

A solução para o seu problema é criar um script no estilo init. Copie um dos existentes ou crie o seu a partir do zero (veja este tópico do StackExchange para mais detalhes; alternativamente, há muita documentação na Internet para criar scripts de inicialização no Linux).

Se você quiser que o script faça o mesmo quando o computador estiver sendo desligado e reinicializado, basta criar um link para seu script nos diretórios /etc/rc0.d e /etc/rc6.d .

Se você deseja que duas coisas diferentes aconteçam, dependendo de o computador estar sendo desligado ou reiniciado, crie dois scripts diferentes e faça um link flexível nos diretórios apropriados.

    
por 04.04.2015 / 09:16