Executar Script na Inicialização do Sistema com Systemd

Publicado por Thiago Silva em 18/10/2019

[ Hits: 20.398 ]

 


Executar Script na Inicialização do Sistema com Systemd



O Systemd é um sistema de gerenciamento de serviços (daemons) e não trabalha diretamente com scripts. Esse detalhe pode representar uma dor de cabeça para um usuário típico que simplesmente deseja executar um script ao iniciar o sistema. Nesta dica, mostrarei como criar uma pasta onde basta salvar lá os seus scripts para que estes sejam executados pelo Systemd ao iniciar o sistema.

Primeiro de tudo, deve ser dito que o Systemd não inicia scripts naturalmente. Para contornar isso, precisamos criar um daemon (tecnicamente não será isso de verdade, o Systemd só precisa pensar que é). Esse arquivo é uma unit. Você pode pesquisar sobre a sintaxe desse tipo de arquivo em outro momento, mas ele é inspirado nos arquivos ".desktop" da XDG Desktop Entry Specification.

Você pode fazer a seguinte analogia: para adicionar um programa ao menu do Gnome, por exemplo, você precisa de um arquivo ".desktop" que explique para o sistema onde está o executável, o ícone etc. Esse arquivo deve estar em um local específico. Da mesma forma, precisamos criar a nossa unit em um lugar onde o Systemd o ache.

Execute:

# nano /etc/systemd/system/initscr.service

O diretório /etc/systemd/system é o local normal para que o administrador do sistema crie as suas units, mas não é o único local possível. O código acima cria o arquivo "initscr.service" e o edita com o nano. Use outro editor de texto se preferir.

Agora vamos adicionar o conteúdo desse arquivo:

[Unit]
Description=ScriptInit

[Service]
Type=simple
RemainAfterExit=yes
ExecStart=/opt/initScripts/init.sh start
ExecStop=/opt/initScripts/init.sh stop
ExecReload=/opt/initScripts/init.sh restart

[Install]
WantedBy=multi-user.target

Note que esse é um modelo básico de unit. Você não precisa fazer nada aqui: eu a escrevi de modo a executar um script que ainda não existe, consegue ver? Estou falando da linha "ExecStart=/opt/initScripts/init.sh start". Agora você deve criar uma pasta (pode ser como usuário normal) em /opt com o nome "initScripts".

Dentro da pasta, execute:

# nano init.sh

E insira um simples script:

#!/bin/bash
cd /opt/initScripts/scr
for i in *;
do
        ./$i
done

Salve e feche o arquivo. Agora damos permissão de execução para ele:

# chmod +x init.sh

Crie uma pasta dentro de "initScripts" com o nome "scr". Nesta pasta (scr) coloque os scripts que deseja iniciar automaticamente. Se quiser, você pode criar um link simbólico em algum lugar prático para facilitar o acesso a essa pasta que será o coração do nosso sistema.

Agora, basta atualizar a lista de units e habilitar a nova que adicionamos:

# systemctl daemon-reload
# systemctl enable initscr

Está feito! Agora todos os scripts que você adicionar em /opt/initScripts/scr serão executados automaticamente junto com o sistema. É claro que você não precisa trabalhar em /opt, ou com a estrutura que eu trouxe aqui, se você entendeu a lógica, pode ficar à vontade para fazer como lhe for cômodo, mas em geral para um usuário típico (como eu) isso deve servir.

No meu caso, criei um link simbólico da pasta "scr" na minha pasta principal com o nome Scripts, então basta copiar e colar quando preciso iniciar algo.

Não se esqueça que desse modo, os scripts são executados como root.

Outras dicas deste autor

Controle de Acesso ao Servir Arquivos com Django/Python

Spotify no Arch Linux

Dash to Dock no Gnome 3.34

Instalação do OpenOffice no Arch Linux

Remover pedido de senha para Chaveiro de Sessão

Leitura recomendada

Arch Linux - erro "ssh_exchange_identification: read: Connection reset by peer" [RESOLVIDO]

Música parando quando tela bloqueia/apaga [RESOLVIDO]

Dreamweaver no Linux

Instalando o mldonkey mesmo com os servidores oficiais offline

Skins "Personas" para Firefox

  

Comentários
[1] Comentário enviado por albfneto em 18/10/2019 - 20:24h

conheço isso, já usei,
mas para lembrar caso eu precise, favoritei sua Dica.

¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
Albfneto,
Ribeirão Preto, S.P., Brasil.
Usuário Linux, Linux Counter: #479903.
Distros Favoritas: [i] Sabayon, Gentoo, OpenSUSE, Mageia e OpenMandriva[/i].

[2] Comentário enviado por Ryuk em 19/10/2019 - 17:37h

Interessante.
Boa dica.

[3] Comentário enviado por Welison em 22/05/2020 - 19:23h

Isso que estava precisando !!!
Funcionou perfeitamente

[4] Comentário enviado por rodolfonr em 26/01/2021 - 13:36h

Bom dia!

Estou apanhando com scripts no Deepin minha nossa deveria deixar como no Ubunto bem mais fácil hahah. Enfim: minha dúvida é referente a permissão, o que tenho que fazer para o usuário1 rodar isso diretamente, digo eu preciso rodar esse scritp apóso login do usuário autenticar-se . Tentei criar a pasta com um usuário comim e dá acesso negado.

Meu scritp é algo bem simples: o google chrome deverá abrir uma página determinada em modo Kiosk Mode .

Pode me dar a dica de como fazer isso parceiro porm favor?

Meus agradecimentos desde já


[5] Comentário enviado por jheckson em 23/04/2021 - 16:02h

Fiz no Pop!_Os mas não deu certo, fiz e refiz mas o script não executa.

[6] Comentário enviado por marcoaaj em 25/08/2021 - 13:27h


[5] Comentário enviado por jheckson em 23/04/2021 - 16:02h

Fiz no Pop!_Os mas não deu certo, fiz e refiz mas o script não executa.


Dê permissão de execução para os scripts da sua pasta src também..

[7] Comentário enviado por mmartin em 25/11/2021 - 19:43h

Olá! Eu consigo criar um serviço que inicia no boot, mas agora preciso de um que inicie somente após um usuário qualquer fazer login, e que execute um script como root. Alguém já fez isso?



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts