Os serviços no Linux são iniciados assim que o sistema inicializa ou reinicia. Veja como você pode criar um serviço systemd de inicialização automática em seu PC Linux.
O systemd é o gerenciador de serviços de muitas distribuições Linux conhecidas. Um serviço é uma unidade de um programa que normalmente é executado em segundo plano. Os serviços, por natureza, são iniciados automaticamente assim que o sistema inicializa e podem ser executados sem supervisão.
Se você precisar criar uma tarefa ou programa de inicialização automática que seja executado toda vez que você inicializar ou reinicializar o sistema, considere a criação de um novo serviço. Vamos aprender como criar um novo serviço systemd personalizado no Linux.
Passo 1: Criando o arquivo de serviço
Existem algumas etapas necessárias para criar um novo arquivo de serviço systemd. A primeira delas é a criação do arquivo unit para o serviço. Antes de criar um arquivo de serviço, você deve entender sua estrutura.
Vamos estudar o arquivo de serviço extraindo um arquivo de serviço real e funcional de seu sistema Linux. Abaixo, você pode ver o arquivo de serviço para o serviço vmtools daemon.
Esse serviço específico pode não estar presente em seu sistema, a menos que você também esteja executando o Linux no VMware com as ferramentas VMware instaladas. O serviço em questão não é importante porque todos os serviços, ou melhor, arquivos de unidade de serviço, possuem a mesma estrutura base com algumas customizações conforme a necessidade.
Todos os arquivos de serviço systemd devem ter três seções: [Serviço], [Unidade], e [Instalar]e alguns parâmetros em cada seção. Veja o que cada seção contém e por que elas são importantes:
1. Unidade
O Unidade A seção inclui metadados importantes, como uma descrição e dependências do serviço. Possui três parâmetros: Descrição, Antes, e Depois. Como o mesmo sugere, o Descrição O parâmetro fornece algum contexto do serviço e o que ele faz.
O Antes e Depois Os parâmetros definem as condições a serem atendidas para que o serviço seja executado. Por exemplo, se você estiver iniciando um serviço de servidor da Web, deseja que ele seja iniciado somente depois que o serviço de rede estiver online. Então você definiria o valor do Depois parâmetro para o serviço de rede.
2. Serviço
O Serviço seção contém dois parâmetros obrigatórios: ExecStart, Tipo, e alguns outros parâmetros opcionais como ExecReload, e mais.
ExecStart define o comando a ser executado quando o serviço é iniciado, enquanto o Tipo O parâmetro determina o tipo de processo a ser gerado.
3. Instalar
Esta seção e seus dados são chamados sempre que você habilita ou desabilita o serviço com o comando systemctl.
Tem alguns parâmetros. Um dos mais comuns e necessários é Procurado por. O Procurado por O parâmetro define as unidades de destino que devem iniciar sempre que o serviço for habilitado. o valor padrão é multiusuário.alvo.
Os parâmetros mencionados aqui não são os únicos parâmetros que você pode definir em um arquivo de unidade. Você pode obter a lista completa de parâmetros no documentação oficial do systemd.exec ou digitando man systemd.exec em um terminal.
Um arquivo de unidade de serviço systemd sempre termina com um ".serviço" extensão e deve ser armazenado no /etc/systemd/system/ diretório. Crie o arquivo de serviço usando o comando de toque com privilégios elevados, prefixando-o com o sudo comando:
sudo touch /etc/systemd/system/.serviço
Agora que você criou o arquivo de serviço, vamos preenchê-lo com a sintaxe necessária para tornar o serviço válido e funcional.
Etapa 2: Configurando o arquivo de serviço
Para demonstração, você criará um serviço de amostra que executa Nmap para escanear as portas em sua máquina e armazene a saída em um arquivo a cada trinta segundos. Para realizar esta tarefa, veja como estruturar o arquivo da unidade de serviço:
[Unidade]
Description=Demonstração do serviço nmap personalizado.
After=network.target[Serviço]
Tipo=simples
Usuário=root
ExecStart=/usr/bin/nmap -sS -O -oN /home//results.txt localhost
Reiniciar=sempre
RestartSec=30
[Instalar]
WantedBy=multi-user.target
Embora os parâmetros mencionados aqui tenham sido explicados anteriormente, vamos ver como eles afetam nosso serviço recém-criado e também explorar novos introduzidos nesta unidade: Reiniciar, RestartSec, e Do utilizador.
Veja o que significam os parâmetros em cada seção:
- Descrição: Texto legível por humanos para descrever as funcionalidades do serviço.
- After=network.target: Ditando ao systemd que este serviço depende de rede.alvo e só deve começar após o rede.alvo serviço foi iniciado. Observe que Depois não é usado para estabelecer nenhuma relação de dependência direta, ele simplesmente atua como um gatilho.
- Tipo=simples: Existem vários tipos de serviço. No entanto, o serviço nesta demonstração é um processo regular e, portanto, declaramos isso. Você pode encontrar todos os valores diferentes para isso na página de documentação oficial vinculada anteriormente.
- Reiniciar=sempre: Isso significa que sempre que o serviço for encerrado, ele deverá ser reiniciado.
- RestartSec=30: Isso define o intervalo entre cada início do serviço para 30 segundos.
- Usuário=raiz: Isso define que o serviço será executado como usuário root. Neste caso, esta é uma etapa obrigatória, pois o Nmap não poderá ser executado sem privilégios de root.
- ExecStart: Esta diretiva contém o caminho absoluto para o programa a ser executado junto com todos os sinalizadores ou argumentos necessários para o programa funcionar corretamente.
- WantedBy=multi-user.target: Este parâmetro em um arquivo de serviço especifica qual destino deve incluir ou "desejar" o serviço. Quando um serviço é incluído em um destino, isso significa que o serviço deve iniciar quando o sistema atingir esse destino durante o processo de inicialização. Nesse caso, o serviço deve iniciar quando o sistema entrar no modo multiusuário. O modo multiusuário é um estado em que o sistema é totalmente inicializado e permite que vários usuários façam login e usem o sistema.
Passo 3: Habilitando e Iniciando o Serviço
Agora que você criou o arquivo da unidade, as únicas etapas restantes para ativar seu serviço são habilitá-lo e executá-lo. Você pode ativar e iniciar seu serviço usando o comando systemctl.
Veja como usar o systemctl para habilitar, iniciar e verificar o status do seu serviço:
sudo systemctl ativar .serviço
sudo systemctl start .serviço
sudo systemctl status .serviço
Agora, seu serviço personalizado deve estar funcionando! Nesse caso, você deve ver uma varredura do Nmap sendo executada a cada trinta segundos e a saída sendo armazenada no resultados.txt arquivo no diretório inicial.
Configurar um serviço systemd no Linux é fácil!
Embora a configuração de um serviço personalizado a partir do zero possa parecer assustadora no início, é uma maneira bastante fácil de definir um processo autônomo e autoexecutável para realizar tarefas repetitivas para você e aumentar seu produtividade.
No serviço de demonstração, mal arranhamos a superfície de como você pode configurar e configurar um serviço. Para saber tudo sobre como personalizar seu serviço, é recomendável consultar a documentação oficial vinculada na nota.
Se configurar e manter um serviço parecer uma tarefa muito difícil para você, considere verificar uma maneira alternativa de automatizar tarefas repetitivas no Linux.