05/06/2020

Scripts de inicialização com Systemd

     O systemd é um sistema de inicialização (init system) composto por um conjunto de programas executado em segundo plano (ou seja, um daemon). Atualmente, a maioria das distribuições linux utiliza este daemon para gerenciar a inicialização do sistema. Dessa forma, se for necessário adcionar algum script a inicialização do Linux, não basta mais colocar o mesmo no /etc/rc.local, é necessário seguir o padrão do systemd.

     A inclusão de um script na inicializa é necessário que sejam seguidos alguns passos conforme a seguir.

1. Criação do script

     Embora o systemd seja o responsável pela inicialização do Linux, ele não inicializa scripts naturalmente, logo o script propriamente dito ainda é necessário.

     Crie o script para executar a ação desejada e salve no diretório que desejar. Como exemplo, será utilizado o script vpn_manager.sh salvo em /usr/local/sbin, pois facilita a posterior utilização.

2. Definir o momento da execução.

     O systemd executa as units (seus scripts) de acordo com o nível de execução definido no script. Assim, para informar quando deve ocorrer a execução, é necessário informar após qual processo ela deve ocorrer.
systemd-analyze plot > systemd.svg 
     O comando acima gera um relatório com todas as inicializações, sequência e tempo de inicialização individual, resultando em uma “imagem” com um gráfico. Para conseguir visualiza-la pode-se utilizar um navegador como Chrome, Chromium ou Firefox. Ou então algum programa de imagem ImageMagick, gimp, inkscape, etc.

3. Criando um serviço no daemon

Criar um arquivo com a nomenclatura [vpn_manager].service em /lib/systemd/system/, incluindo o conteúdo a seguir:
[Unit]
# Descricao do que sera executado
Description=gerenciamento de vpn
# Esta unit sera executada apos o servico definido
After=network.service openvpn.service

[Service]
# Tipo de inicialização
Type=simple
# Para que o systema considere o servico como ativo após executado
#RemainAfterExit=yes
# Este campo exige o caminho completo até o script a ser executado
ExecStart=/usr/local/sbin/vpn_manager.sh

[Install]
# Serviço valido para o runlevel multi-user.targe
WantedBy=multi-user.target 
Outras configurações pode ser realizadas, incluindo opções de start, status e stop. Mais informações podem ser encontradas nesse link ou nas referências.

4. Efetivando a configuração

chmod +x /usr/local/sbin/vpn_manager.sh
systemctl enable /lib/systemd/system/vpn_manager.service
systemctl daemon-reload
reboot
A primeira linha da permissão de execução para o script, caso ainda não tenha sido feito. A segunda habilita o service, a terceira recarrega ao daemon e a última reinicia o sistema para testar a configuração.  Sempre que forem realizadas alterações no daemon, o mesmo deve ser recarregado.