📒 

Usar o systemd para iniciar um serviço Linux no arranque

o systemd é o sistema de inicialização moderno usado por muitas distribuições Linux para gerenciar os serviços e recursos do sistema. Uma de suas principais caraterísticas é a capacidade de iniciar serviços automaticamente na inicialização, garantindo que aplicativos e serviços críticos estejam em funcionamento assim que o sistema for iniciado. Este artigo irá guiá-lo através das etapas para criar uma unidade de serviço systemd e habilitá-la para iniciar na inicialização.

O que é o systemd?

o systemd é um sistema de inicialização que substitui os sistemas de inicialização mais antigos, como o SysVinit e o Upstart. Ele gerencia os processos e serviços do sistema, permitindo a paralelização da inicialização do serviço, inicialização sob demanda de daemons e melhor controle de recursos. Com a sua estrutura de ficheiros unitários, o systemd fornece uma forma flexível de gerir serviços, sockets, dispositivos e outros recursos do sistema.

Criando um serviço systemd

Para iniciar um serviço na inicialização usando o systemd, é necessário criar um arquivo de unidade de serviço. Este arquivo contém todas as informações necessárias para que o systemd gerencie o serviço. Aqui está como criar e configurar um arquivo de unidade de serviço:

Passo 1: Verificar o diretório de trabalho

  1. Abra o seu ficheiro de unidade de serviço para verificar a diretiva WorkingDirectory:
    sudo nano /etc/systemd/system/myapp.service
  2. Encontre a linha WorkingDirectory. Deve ter o seguinte aspeto ( Procurar: Criar o ficheiro de unidade de serviço):
    WorkingDirectory=/etc/systemd/myapp
  3. Verifique se o diretório especificado existe:
    ls -l /etc/systemd/myapp

    * /path/to/myapp – substitua pelo caminho atual que pretende utilizar. Se receber um erro a indicar que o diretório não existe, terá de o criar.

Etapa 2: Criar o diretório de trabalho

  1. Se o diretório não existir, crie-o:
    sudo mkdir -p /etc/systemd/myapp
  2. Defina as permissões apropriadas para que o utilizador especificado na diretiva User do seu serviço possa aceder ao mesmo. Por exemplo, se o seu serviço for executado como myuser:
    sudo chown myuser:myuser /etc/systemd/myapp

    Criar o ficheiro da unidade de serviço

    1. Abra um terminal no seu sistema Linux.
    2. Crie um novo arquivo de unidade de serviço no diretório /etc/systemd/system/. O nome do arquivo deve terminar com .service. Por exemplo, para criar um serviço para uma aplicação personalizada chamada myapp, deve executar:
      sudo nano /etc/systemd/system/myapp.service
    3. Adicione o seguinte conteúdo ao ficheiro, modificando-o conforme necessário para a sua aplicação:
      [Unidade]
      Descrição=Minha aplicação personalizada
      After=network.target
      [Serviço]
      ExecStart=/usr/bin/myapp
      Reiniciar=sempre
      Utilizador=meu utilizador
      WorkingDirectory=/etc/systemd/myapp
      [Instalar]
      WantedBy=multi-user.target

      • secção [Unidade]: Esta secção fornece metadados e dependências para o serviço.
        • Descrição: Uma breve descrição do serviço.
        • Após: Especifica que o serviço deve ser iniciado depois de a rede estar disponível.
      • secção [Serviço]: Esta secção define o comportamento do serviço.
        • ExecStart: O comando para iniciar o serviço. Substitua /usr/bin/myapp pelo caminho para o seu executável.
        • Restart: Define o comportamento de reinicialização. sempre significa que o serviço será reiniciado se falhar.
        • Utilizador: Especifica o utilizador sob o qual o serviço deve ser executado.
        • WorkingDirectory: Define o diretório de trabalho para o serviço.
      • secção [Install]: Esta secção define como o serviço deve ser ativado.
        • WantedBy: Define o destino sob o qual o serviço deve ser iniciado. multi-user.target é um destino comum para serviços de utilizador.

Passo 3: Verificar as permissões

  1. Verifique se o utilizador tem as permissões corretas para aceder ao diretório de trabalho:
    ls -ld /etc/systemd/myapp

    Certifique-se de que as permissões permitem ao utilizador ler e executar ficheiros neste diretório.

Etapa 4: Executável de teste no diretório de trabalho

  1. Certifique-se de que a sua aplicação pode ser executada a partir deste diretório de trabalho. Pode testar isto mudando para o utilizador e navegando para o diretório:
    sudo -u myuser bash
    cd /etc/systemd/myapp
    /usr/bin/myapp
    Verifique se ele é executado sem nenhum erro. Se falhar, resolva o problema da própria aplicação.

Etapa 5: Recarregar o systemd e iniciar o serviço

  1. Depois de garantir que o diretório de trabalho exista e esteja configurado corretamente, recarregue a configuração do systemd:
    sudo systemctl daemon-reload
  2. Tente iniciar o serviço novamente:
    sudo systemctl start myapp.service

Passo 6: Verificar o estado

  1. Verifique o estado do serviço para ver se foi iniciado com êxito:
    sudo systemctl status myapp.service

Etapa 7: Revisar os logs para erros adicionais

Se o serviço continuar a não iniciar, reveja os registos para obter informações adicionais:

journalctl -u myapp.service

Etapa 8: (Opcional) Parar e desativar o serviço

Se precisar parar o serviço ou impedir que ele inicie na inicialização, pode usar os seguintes comandos:

  • Para parar o serviço:
    sudo systemctl stop myapp.service
  • Para desativar o início do serviço no arranque:
    sudo systemctl disable myapp.service

Conclusão

Usar o systemd para iniciar um serviço Linux na inicialização é um processo simples que aumenta a confiabilidade e o gerenciamento do sistema. Ao criar um arquivo de unidade de serviço, você pode definir como seu aplicativo deve ser executado e garantir que ele inicie automaticamente com seu sistema. Esse método não apenas simplifica o gerenciamento de serviços, mas também fornece recursos poderosos para controlar o comportamento do serviço, tornando o systemd uma ferramenta essencial para a administração moderna do sistema Linux.

Com esses passos, você pode efetivamente configurar e gerenciar seus próprios serviços, melhorando a funcionalidade geral do seu ambiente Linux. Se encontrar algum problema, a revisão dos registos com o journalctl pode fornecer informações úteis sobre o que pode estar a correr mal.