Red Hat Training
A Red Hat training course is available for RHEL 8
3.5.3. Criação de arquivos unitários personalizados
Há vários casos de uso para criar arquivos de unidade do zero: você poderia executar um daemon personalizado, criar uma segunda instância de algum serviço existente (como em Criar uma segunda instância do serviço sshd), ou importar um script de inicialização SysV (mais em Converter scripts de inicialização SysV em arquivos de unidade). Por outro lado, se você pretende apenas modificar ou ampliar o comportamento de uma unidade existente, use as instruções de Modificação de arquivos de unidade existentes. O procedimento a seguir descreve o processo geral de criação de um serviço personalizado.
Procedimento
-
Preparar o arquivo executável com o serviço personalizado. Este pode ser um script personalizado, ou um executável entregue por um fornecedor de software. Se necessário, prepare um arquivo PID para manter um PID constante para o processo principal do serviço personalizado. Também é possível incluir arquivos de ambiente para armazenar variáveis shell para o serviço. Certifique-se de que o script fonte seja executável (executando o
chmod a x
) e não seja interativo. Crie um arquivo unitário no diretório
/etc/systemd/system/
e certifique-se de que ele tenha as permissões corretas do arquivo. Executar comoroot
:touch /etc/systemd/system/name.service
chmod 664 /etc/systemd/system/name.service
Substituir name por um nome do serviço a ser criado. Note que o arquivo não precisa ser executável.
Abra o
name.service
criado na etapa anterior, e adicionar as opções de configuração do serviço. Há uma variedade de opções que podem ser usadas dependendo do tipo de serviço que você deseja criar, veja Estrutura do arquivo de unidade. A seguir, um exemplo de configuração de unidade para um serviço relacionado à rede:[Unit] Description=service_description After=network.target [Service] ExecStart=path_to_executable Type=forking PIDFile=path_to_pidfile [Install] WantedBy=default.target
Onde:
-
service_description é uma descrição informativa que é exibida em arquivos de diário de bordo e na saída do comando
systemctl status
. -
a configuração
After
garante que o serviço seja iniciado somente depois que a rede estiver funcionando. Adicione uma lista separada por espaço de outros serviços ou alvos relevantes. - path_to_executable representa o caminho para o serviço executável real.
-
Type=forking
é usado para daemons que fazem a chamada do sistema de garfos. O processo principal do serviço é criado com o PID especificado em path_to_pidfile. Encontre outros tipos de inicialização em Tabela 3.10, “Opções importantes da seção [Serviço]”. -
WantedBy
declara a meta ou metas que o serviço deve ser iniciado. Pense nessas metas como uma substituição do antigo conceito de níveis de execução.
-
service_description é uma descrição informativa que é exibida em arquivos de diário de bordo e na saída do comando
Notifique systemd que um novo
name.service
existe através da execução do seguinte comando comoroot
:systemctl daemon-reload
systemctl start name.service
AtençãoSempre execute o comando
systemctl daemon-reload
após criar novos arquivos de unidade ou modificar os arquivos de unidade existentes. Caso contrário, os comandossystemctl start
ousystemctl enable
poderiam falhar devido a um descompasso entre os estados de systemd e arquivos de unidades de serviço reais em disco. Note que em sistemas com um grande número de unidades isso pode levar muito tempo, pois o estado de cada unidade tem que ser serializado e subseqüentemente deserializado durante a recarga.
3.5.3.1. Criação de um arquivo unitário personalizado utilizando a segunda instância do serviço sshd
Os administradores de sistema freqüentemente precisam configurar e executar várias instâncias de um serviço. Isto é feito criando cópias dos arquivos originais de configuração do serviço e modificando certos parâmetros para evitar conflitos com a instância principal do serviço. O procedimento a seguir mostra como criar uma segunda instância do serviço sshd
.
Procedimento
Criar uma cópia do arquivo
sshd_config
que será usado pelo segundo daemon:# cp /etc/ssh/sshd{,-second}_config
Edite o arquivo
sshd-second_config
criado na etapa anterior para atribuir um número de porta e um arquivo PID diferentes ao segundo daemon:Port 22220 PidFile /var/run/sshd-second.pid
Consulte a página
sshd_config
(5) do manual para obter mais informações sobre as opçõesPort
ePidFile
. Certifique-se de que a porta escolhida não esteja em uso por nenhum outro serviço. O arquivo PID não precisa existir antes de executar o serviço, ele é gerado automaticamente no início do serviço.Criar uma cópia do arquivo da unidade systemd para o serviço
sshd
:# cp /usr/lib/systemd/systemd/system/sshd.service /etc/systemd/systemd/system/sshd-second.service
Altere o
sshd-second.service
criado na etapa anterior como segue:Modifique a opção
Description
:Descrição=OpenSSH servidor de segunda instância daemon
Adicionar sshd.service aos serviços especificados na opção
After
, de modo que a segunda instância só comece após a primeira já ter começado:After=syslog.target network.target auditd.service sshd.service
- A primeira instância do sshd inclui a geração chave, portanto, remova a linha ExecStartPre=/usr/sbin/sshd-keygen.
Adicione o parâmetro
-f /etc/ssh/sshd-second_config
ao comandosshd
, para que seja utilizado o arquivo de configuração alternativa:ExecStart=/usr/sbin/sshd -D -f /etc/ssh/sshd-second_config $OPTIONS
Após as modificações acima, o serviço sshd-segundo.serviço deve ter a seguinte aparência:
[Unit] Description=OpenSSH server second instance daemon After=syslog.target network.target auditd.service sshd.service [Service] EnvironmentFile=/etc/sysconfig/sshd ExecStart=/usr/sbin/sshd -D -f /etc/ssh/sshd-second_config $OPTIONS ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=on-failure RestartSec=42s [Install] WantedBy=multi-user.target
Se utilizar SELinux, adicione a porta para a segunda instância de sshd aos portos SSH, caso contrário, a segunda instância de sshd será rejeitada para se ligar ao porto:
# porto semanage -a -t ssh_port_t -p tcp 22220
Habilite o sshd-second.service, para que ele comece automaticamente na inicialização:
# systemctl habilita sshd-second.service
-
Verifique se o sshd-second.service está rodando usando o comando
systemctl status
. Verificar se a porta está habilitada corretamente, conectando-se ao serviço:
$
ssh -p 22220 user@server
Se o firewall estiver em uso, certifique-se de que esteja configurado adequadamente para permitir conexões com a segunda instância de sshd.