Header Ads

Como executar um programa Linux na inicialização com systemd

Fatmawati Achmad Zaenuri / Shutterstock

Precisa iniciar um programa Linux na inicialização? O software systemd fornece uma maneira de fazer isso em qualquer distribuição Linux com o systemd — que é a maioria deles atualmente, incluindo o Ubuntu. Iremos orientá-lo no processo de criação de um serviço integrado — e ele até fala para o jornal.

Este tutorial demonstra como configurar um serviço do sistema que é iniciado quando você inicia o sistema. Para iniciar um programa gráfico ao fazer login, use o gerenciador de inicialização de sua área de trabalho.

Executando programas na inicialização

Às vezes, o software que você instala no computador se conecta ao processo de inicialização do Linux, de modo que o programa é iniciado automaticamente sempre que o computador é iniciado. Você pode obter facilmente esse mesmo comportamento com seus próprios programas e scripts ou, na verdade, com qualquer outro programa que esteja em seu computador.

Os programas lançados na inicialização são controlados pelo systemd, o sistema e o gerenciador de serviços. systemd é o primeiro processo a ser executado na inicialização. Ele sempre tem ID de processo (PID) 1. Todos os outros processos em execução em seu computador são iniciados pelo systemd ou por um processo que o systemd já iniciou.

Os programas executados em segundo plano são chamados daemons ou serviços. O “ d ” no final de systemd significa daemon. Neste artigo, criaremos um serviço de exemplo. Para marcar todas as caixas, nosso serviço deve ser:

  • Integrado com systemd por meio de um arquivo de unidade de serviço
  • Lançado na inicialização
  • Controlável usando systemctl, a interface de controle para systemd
  • Capaz de escrever para o jornal

Criando o programa de serviço

Precisamos ter um programa que o systemd irá lançar. Vamos criar um script simples, chamado “ htg. sh ”. Este tutorial usa o editor de texto Gedit, mas você pode usar qualquer editor de texto de sua preferência.

 toque em htg. sh 

 gedit htg. sh 

O editor gedit será aberto. Copie e cole o seguinte texto no editor.

 #! / bin / bash echo "htg. service: ## Iniciando ##" | systemd-cat -p info while: fazer TIMESTAMP = $ (date '+% Y-% m-% d% H:% M:% S') echo "htg. service: timestamp $" | systemd-cat -p info sleep 60 done 

Salve suas alterações e feche o editor.

O script não faz muita coisa, mas existem alguns pontos dignos de nota.

  • As duas linhas de eco são canalizadas por meio do systemd-cat, um programa que pega a saída de um programa e a envia para o diário. As entradas no diário têm prioridade. Estamos usando a opção -p (prioridade) para indicar que nossas mensagens são apenas informativas (informações). Eles não são erros ou avisos importantes.
  • Há um loop while interminável.
  • A variável TIMESTAMP é definida para a data e hora atuais. Isso é formatado em uma mensagem e enviado ao diário.
  • O script então dorme por 60 segundos.
  • Após 60 segundos, o loop é repetido. Portanto, este script grava uma mensagem com carimbo de data / hora no diário uma vez por minuto.

Copiaremos o script para o diretório / usr / local / bin.

 sudo cp htg. sh / usr / local / bin 

E precisamos torná-lo executável:

 sudo chmod + x /usr/local/bin/htg. sh

Criação do arquivo de unidade de serviço

Cada programa iniciado pelo systemd possui um arquivo de definição, denominado arquivo de unidade de serviço. Isso contém certos atributos que o systemd pode usar para localizar e iniciar o programa e para definir alguns de seus comportamentos.

Precisamos criar um arquivo de unidade para nosso novo serviço, mas é prudente garantir que nenhum dos arquivos de unidade existentes tenha o nome que queremos dar ao nosso novo serviço.

 sudo systemctl list-unit-files --type-service 

Você pode percorrer a lista de arquivos de unidade, que é classificada em ordem alfabética, e verificar se o nome que deseja usar não foi escolhido.

Nosso serviço se chamará “ htg. service ”. Nenhum arquivo de unidade tem esse nome, então podemos prosseguir e criar nosso arquivo de unidade.

 sudo gedit /etc/systemd/system/htg. service

O editor gedit será aberto. Copie e cole o seguinte texto no editor:

 [Unit] Description = How-To Geek Service Example Want = network. target After = syslog. target network-online. target [Service] Type = simple ExecStart = / usr / local / bin / htg. sh Reiniciar = em caso de falha RestartSec = 10 KillMode = processo [Instalar] WantedBy = multi-user. target 

Salve suas alterações e feche o editor.

As entradas têm esses significados. Essas são entradas típicas. Nosso serviço simples, na verdade, não precisa da maioria deles, mas incluí-los nos permite explicá-los.

  • Descrição: esta é uma descrição de texto do seu serviço.
  • Desejo: Nosso serviço deseja — mas não exige — que a rede esteja ativa antes de nosso serviço é iniciado.
  • Depois: Uma lista de nomes de unidades que devem ser iniciados após este serviço ter sido iniciado com sucesso, se ainda não estiverem em execução.
  • Digite: Simples. O systemd considerará este serviço iniciado assim que o processo especificado por ExecStart for bifurcado.
  • ExecStart: O caminho para o processo que deve ser iniciado.
  • Reiniciar: Quando e se o serviço deve ser reiniciado. Nós o definimos para “ em caso de falha. ”
  • RestartSec: Quanto tempo esperar antes de tentar reiniciar o serviço. Este valor está em segundos.
  • KillMode: define como o systemd deve encerrar o processo se pedirmos ao systemctl para interromper o serviço. Definimos isso para “ processar. ” Isso faz com que o systemd use o sinal SIGTERM apenas no processo principal. Se nosso serviço fosse um programa não trivial em vez de um script simples, definiríamos isso como “ misto ” para garantir que todos os processos gerados também sejam encerrados.
  • WantedBy: temos definido como “ multi-user. target ”, o que significa que o serviço deve ser iniciado enquanto o sistema estiver em um estado em que vários usuários podem fazer login, independentemente de haver ou não uma interface gráfica disponível.

O arquivo de unidade não precisa ser executável, mas as permissões do arquivo de unidade devem restringir quem pode editá-lo. Você não quer que um usuário malicioso ou malicioso altere o arquivo de unidade para que execute um programa totalmente diferente.

Este comando dará ao proprietário permissões de leitura e gravação, e permissões de leitura ao grupo. Outros não terão permissão.

 sudo chmod 640 /etc/systemd/system/htg. service

Podemos fazer com que o systemctl verifique a sintaxe do nosso arquivo de unidade para nós, mesmo se o serviço ainda não estiver em execução. Quaisquer erros serão relatados. (Na verdade, a parte “ . service ” é opcional para a maioria dos comandos.)

 systemctl status htg. service 

Nenhum erro é destacado, o que significa que nosso arquivo de unidade está sintaticamente correto.

Iniciando o serviço

Ao adicionar um novo arquivo de unidade ou editar um existente, você deve dizer ao systemd para recarregar as definições do arquivo de unidade.

 sudo systemctl daemon-reload 

Se quiser que um serviço seja iniciado na inicialização, você deve habilitá-lo:

 sudo systemctl enable htg 

A ativação de um serviço não o inicia, apenas o define para ser iniciado no momento da inicialização. Para iniciar o serviço agora, você deve usar systemctl com a opção start.

 sudo systemctl start htg 

Verificando o serviço

Depois de iniciar o serviço manualmente ou reiniciar o computador, podemos verificar se nosso serviço está funcionando corretamente.

 sudo systemctl status htg. service 

O status do serviço é exibido para nós.

  • O ponto verde significa que nosso serviço está funcionando perfeitamente.
  • O nome do serviço é “ htg. service ” e a descrição longa é aquele que fornecemos no arquivo de unidade.
  • É mostrado qual arquivo de unidade foi carregado “ /etc/systemd/system/htg. service” ;.
  • O serviço está ativo e o horário em que o serviço foi lançado é listado para nós.
  • Seu PID é 7762.
  • Existem duas tarefas associadas ao serviço.
  • Um total de 928 Kibibytes de memória está sendo usado pelo serviço.
  • O grupo de controle inclui o “ htg. sh ” script e o comando de suspensão, que foi iniciado por “ htg. sh. ” Na maioria das vezes, o comando sleep fará o trabalho para este serviço.

Também foram mostrados os últimos 10 registros de diário produzidos por este serviço. Não é novidade que eles estão separados por um minuto.

Parando e desabilitando o serviço

Se precisar parar o serviço, você pode fazer isso com este comando:

 sudo systemctl stop htg. service 

Isso interrompe o serviço, mas não impede que seja reiniciado na próxima vez que o computador for reiniciado. Para interromper o serviço que está sendo lançado na inicialização, você precisa desativá-lo:

 sudo systemctl disable htg. service 

Se o serviço estiver em execução, este comando não o interromperá. Ele simplesmente diz ao systemd para não iniciar o serviço na próxima reinicialização.

Se você deseja interromper o serviço e evitar que ele seja iniciado na inicialização, use os dois comandos.

Dica de serviço

Certifique-se de que seu programa seja executado conforme o esperado antes de tentar iniciá-lo como um serviço.

Veja Também:

Nenhum comentário