Executar código no desligamento do Fedora 19

4

Eu preciso pegar qualquer sistema operacional desligado e executar algumas ações antes de deixar o sistema operacional ser desligado. Estou usando o Fedora 19 e o C ++.

Eu sou capaz de capturar um sinal de desligamento dado pelo console com o seguinte código C ++:

myAct.sa_handler = myStructure::mySignalHandler;
sigaction(mySignal, &act, NULL);

O sinal mySignal pode ser ativado via /etc/init.d e um código personalizado executado antes de um desligamento ser feito.

No Fedora 12 Kernel 2.6, estas soluções funcionam perfeitamente. A solução funciona no Fedora 19 Kernel 3.9.5 se eu tentar desligar o computador usando a interface gráfica.

No entanto, não consigo executar meu código quando um comando é usado em um terminal para reinicializar ou desligar o computador no kernel do Fedora 19. 3.9.5 A solução não funciona mais desde que caiu o sistema usual de script init.d .

Colocar meu script no local /usr/lib/systemsd não funciona, o script é executado, mas os outros scripts também são executados. Assim, o sistema desliga não tratando meus comandos.

Como posso resolver esse problema?

    
por Xaltar 23.04.2014 / 14:27

1 resposta

0

O sinal pode ser capturado de um processo em execução . Portanto, se você iniciar um processo de longa duração (também conhecido como daemon) na inicialização, você receberá um SIGTERM desse processo e fará o que quiser com o manipulador de sinal. No entanto, esse é o pior método possível: um processo extra sem fazer nada e apenas aguardando a chegada de um sinal.

Você tem melhores maneiras de conseguir isso, esp. com systemd. O arquivo de unidade ( foo.service ) terá a seguinte aparência:

[Unit]
Description=Perform my actions
DefaultDependencies=no
Before=shutdown.target

[Service]
Type=oneshot
ExecStart=/path/to/your/application

No entanto, tenha em mente que, devido à natureza paralela do systemd, esta unidade pode ser iniciada arbitrariamente atrasada no processo de desligamento (embora isso possa ser influenciado pelo uso cuidadoso das dependências).

    
por 27.12.2014 / 22:12