Precisa lançar um programa Linux na inicialização? O software systemd fornece uma maneira de fazer isso em qualquer distribuição Linux com systemd – o que é a maioria deles atualmente, incluindo o Ubuntu. Orientaremos você no processo de criação de um serviço integrado – e ele até fala com 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 entrar, use o gerenciador de inicialização de sua área de trabalho .
Índice
À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 que são lançados na inicialização são controladas por systemd
, o sistema e serviço gerente. 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 por systemd
, ou por um processo que systemd
já foi iniciado.
Os programas executados em segundo plano são chamados daemons ou serviços. O “d” no final de systemd
representa daemon. Neste artigo, criaremos um serviço de exemplo. Para marcar todas as caixas, nosso serviço deve ser:
systemd
meio de um arquivo de unidade de serviçosystemctl
, a interface de controle parasystemd
Precisamos ter um programa que systemd
será lançado. 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 gedit
editor será aberto. Copie e cole o seguinte texto no editor.
#! / bin / bash echo "htg.service: ## Starting ##" | systemd-cat -p info enquanto : Faz TIMESTAMP = $ (data '+% Y-% m-% d% H:% M:% S') echo "htg.service: timestamp $ {TIMESTAMP}" | systemd-cat -p info dormir 60 feito
Salve suas alterações e feche o editor.
O script não faz muita coisa, mas existem alguns pontos dignos de nota.
echo
linhas são canalizadas 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 -p
opção (prioridade) para indicar que nossas mensagens são apenas informativas (informações). Não são erros ou avisos importantes.while
ciclo infinito .TIMESTAMP
variável é definida para a data e hora atuais. Isso é formatado em uma mensagem e enviado ao diário.Vamos copiar o script para o /usr/local/bin
diretório.
sudo cp htg.sh / usr / local / bin
E precisamos torná-lo executável:
sudo chmod + x /usr/local/bin/htg.sh
Cada programa que é iniciado por systemd
possui um arquivo de definição, denominado arquivo de unidade de serviço. Isso contém certos atributos que systemd
podem ser usados 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 desejamos dar ao 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 gedit
editor será aberto. Copie e cole o seguinte texto no editor:
[Unidade] Descrição = How-To Geek Service Example Want = network.target After = syslog.target network-online.target [Serviço] Tipo = simples 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 realmente não precisa da maioria deles, mas incluí-los nos permite explicá-los.
systemd
irá considerar este serviço iniciado assim que o processo especificado por ExecStart
for bifurcado.systemd
devemos encerrar o processo se pedirmos systemctl
para interromper o serviço. Temos isso definido como “processo”. Isso faz systemd
com que o SIGTERM
sinal seja usado 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 fossem encerrados.O arquivo de unidade não precisa ser executável, mas as permissões no 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 ele execute um programa completamente diferente.
Este comando dará ao proprietário permissões de leitura e gravação e permissões de leitura para o grupo. Outros não terão permissão.
sudo chmod 640 /etc/systemd/system/htg.service
Podemos ter systemctl
verificado a sintaxe de 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.
Quando você adiciona um novo arquivo de unidade ou edita um existente, você deve informar systemd
para recarregar as definições do arquivo de unidade.
sudo systemctl daemon-reload
Se você deseja que um serviço seja iniciado na inicialização, você deve habilitá- lo:
sudo systemctl enable htg
Habilitar um serviço não o inicia, apenas o configura para ser iniciado no momento da inicialização. Para iniciar o serviço agora , você deve usar systemctl
com a start
opção.
sudo systemctl start htg
Depois de iniciar manualmente o serviço 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.
sleep
comando, que foi iniciado por “htg.sh.” Na maioria das vezes, o sleep
comando fará o trabalho para este serviço.Também vemos as últimas 10 entradas de diário produzidas por este serviço. Sem surpresa, todos eles estão com um minuto de diferença.
Se você precisar interromper o serviço, poderá fazer isso com este comando:
sudo systemctl stop htg.service
Isso interrompe o serviço, mas não o impede de reiniciar na próxima vez que o computador for reiniciado. Para parar 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 interrompe. Ele simplesmente informa 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.
Certifique-se de que seu programa seja executado conforme o esperado antes de tentar iniciá-lo como um serviço.
Muitos aplicativos de limpeza estão disponíveis para Windows ao longo dos anos, mas hoje em…
Seu PlayStation 4 está congelado? Seus jogos favoritos continuam travando? Reiniciar seu PS4 pode resolver…
A popularidade das mensagens de texto significou aprender uma forma totalmente nova de comunicação. Você…
A foto dos "Pilares da Criação" tirada pelo Telescópio Espacial Hubble é uma das fotos…
O Proton Drive saiu de seu estágio beta há algumas semanas, mas o aplicativo real…
Para ver suas fotos mais de perto ou para uma edição precisa , você pode…