Idéias erradas e erros
% bl0ck_qu0te% Você aprendeu uma mentira. O doco não diz isso de fato. Você pode usar a substituição de variáveis de ambiente (com uma sintaxe que é sutilmente diferente da maioria dos shells Unix). É simplesmente o caso que não há variável de ambiente HOSTNAME
para substituir . Os processos de serviço não são gerados com essa configuração de variável de ambiente.
Os arquivos da unidade são parametrizáveis, e o parâmetro %H
se expande para o nome do host (dinâmico), como era no ponto no passado em que a unidade foi carregada do arquivo.
Bom. Não. Essa é a coisa errada a fazer. Apenas altere o protocolo de notificação de prontidão para forking
se o seu serviço realmente implementar esse protocolo. Não faça isso como um kludge porque você erroneamente fez um programa que se bifurca sem uma boa razão.
Porque é exatamente isso que você fez. O /bin/sh
desnecessário está forçando um filho a executar autogetty.sh
, que acaba sendo um segundo processo de shell executando esse script de shell. O segundo processo de shell é então forking para executar mingetty
como neto. Isso não corresponde ao protocolo de prontidão de bifurcação, pois depende do fork seguido por exit no pai .
Leve uma lição do mundo dos daemontools: Os serviços são executados, não gerados. O programa que você executa como ExecStart
deve ser o processo de serviço, não algo que gera o processo de serviço.
O caminho certo
O jeito certo de configurar isso é:
- Substitua uma instância específica do modelo, para o dispositivo de terminal específico, não para o modelo inteiro.
- Use
%H
para obter o nome do host emExecStart
. Ou use%m
e a ID da máquina como nomes de sua conta de usuário. - Invoque as coisas corretamente:
- Basta executar
agetty
diretamente para obter melhores resultados. Você não precisa realmente de nenhum script para a tarefa como descrito em tudo. - Se você, no entanto, optar por inserir um script wrapper supérfluo:
- Não use
/bin/sh -c scriptfile
. Basta criarscriptfile
executável, com um interpretador de scripts especificado corretamente e executá-lo diretamente. - Certifique-se de que seu script use
exec
para se tornar o processo getty do daemon.
- Não use
- Basta executar