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.
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].