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:
- Os melhores novos recursos do Android 11, já disponíveis
- O aplicativo Configurações do Windows 10 está realmente empurrando o Microsoft Edge
- Como fazer download de arquivos no Chrome no Android
- Como inserir emojis em documentos do Microsoft Word 📝
- Como impedir que o Dropbox abra na inicialização no Windows ou Mac
Nenhum comentário