Domine o systemd: Execute scripts no Linux antes e após a suspensão!

O método mais eficaz para acionar scripts e comandos durante os processos de suspensão e retomada no Linux, tanto antes de suspender quanto após retomar, é através do sistema de inicialização systemd. Isso se deve à sua interação direta com o kernel e os subsistemas de energia. Dominar essa ferramenta oferece ao usuário um controle substancial sobre o sistema operacional Linux.

É crucial ter em mente que a manipulação do sistema de inicialização pode ser arriscada se não for realizada com o devido conhecimento. Siga as instruções deste guia cuidadosamente para evitar potenciais problemas.

É importante notar que nem todas as distribuições Linux modernas utilizam o systemd como sistema de inicialização. Algumas podem empregar o Upstart ou outras alternativas. Este guia se concentrará no systemd, devido à sua ampla utilização. Se você estiver trabalhando com um sistema que não utiliza o systemd, consulte o manual do seu sistema operacional para obter orientações específicas.

Observação: Usuários do Debian devem substituir todas as ocorrências de `usr/lib/systemd/system-sleep` por `/lib/systemd/system-sleep/`.

Executando um comando antes da suspensão

Para executar um script antes da suspensão, copie um arquivo de script bash para o diretório `/usr/lib/systemd/system-sleep/`. Esses scripts podem realizar diversas ações, mas devem seguir uma sintaxe específica. Comece abrindo um terminal e obtendo privilégios de root com o comando `sudo -s`.

Em seguida, utilize o editor de texto nano para criar um novo script dentro do diretório system-sleep:

nano /usr/lib/systemd/system-sleep/pre-suspend.sh

Adicione o shebang no início do script. Esta etapa é essencial para garantir que o interpretador possa ler e executar o código corretamente.

#!/bin/bash/

A próxima etapa envolve a utilização da estrutura condicional “if”. Ela instruirá o sistema de gerenciamento de energia que, “se” o sistema estiver prestes a ser suspenso, uma ação específica deve ser executada. Insira o código a seguir:

if [ "${1}" == "pre" ]; then
sh /caminho/para/o/script/a/ser/executado.sh

Substitua `sh /caminho/para/o/script/a/ser/executado.sh` pelo comando ou script que você deseja executar em seu sistema Linux (seja ele um computador pessoal ou servidor) imediatamente antes da suspensão. É importante notar que a linha seguinte à declaração “if” não precisa ser restrita a um único comando; você pode usar essa linha para executar múltiplos comandos, desde que sejam válidos para o bash.

A última parte do script “antes de suspender” é a inclusão da seção “else if”. Esta seção não necessita de modificação neste exemplo, pois o foco está em realizar uma ação antes da inatividade do sistema, e não quando ele retomar a atividade.

elif [ "${1}" == "post" ]; then
# nada aqui
fi

Após concluir as modificações no arquivo, salve as alterações pressionando `Ctrl + O`.

Executando um comando após a retomada

A execução de um comando após a retomada segue uma lógica semelhante à execução de um comando antes da suspensão. A diferença principal reside no fato de que a ação a ser executada será posicionada após a seção “elif”, em vez da seção “if”.

Para criar um script de pós-retomada, insira o shebang como a primeira linha:

#!/bin/bash

Na linha seguinte, adicione a seção “if” do script:

if [ "${1}" == "pre" ]; then
# nada aqui

Com este bloco de código inserido no script bash, prossiga e cole a seção “else if”:

elif [ "${1}" == "post" ]; then
sh /caminho/para/o/script/a/ser/executado.sh
fi

Assim como anteriormente, você pode incluir qualquer comando válido sob a linha “elif”. O systemd e o bash se encarregarão da execução.

Executando comandos na suspensão e retomada

Se o objetivo é executar dois comandos opostos – um antes da suspensão e outro na retomada – isso é perfeitamente possível. Para isso, basta personalizar o script e incluir comandos tanto na seção “if” quanto na seção “elif”.

Comece incluindo o shebang no script, para informar ao interpretador que tipo de script é.

#!/bin/bash

Em seguida, adicione a seção “if” do código.

if [ "${1}" == "pre" ]; then
# substitua pelo comando

Na seção “if”, substitua “# substitua pelo comando” pelo comando que você deseja executar imediatamente antes da suspensão do sistema. Prossiga para a seção “elif” e realize o mesmo procedimento.

elif [ "${1}" == "post" ]; then
# substitua pelo comando
fi

Salve o arquivo com `Ctrl + O`.

Atualizando permissões e utilizando o script

Embora todos os comandos necessários estejam presentes no arquivo do script, é preciso atualizar suas permissões antes que ele possa ser executado. Abra um terminal e obtenha acesso root com os comandos `su` ou `sudo -s`. Em seguida, execute o seguinte comando:

chmod +x /usr/lib/systemd/system-sleep/pre-suspend.sh

A partir deste ponto, sempre que o sistema for suspenso ou retomado, os comandos personalizados no script deverão ser executados.

Observação: Se tiver dúvidas sobre systemd system-sleep, consulte o manual com o comando `man systemd-suspend.service`.