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.