Tenho um dispositivo Linux com vários serviços meus.
Kernel: 4.14.151
systemd
:systemd 249 (249.11-0ubuntu3.12)
Meus serviços são escritos como sysvinit
serviços e gerados automaticamente como systemd
serviços usando o /run/systemd/generator.early
.
Tudo funcionava bem até que eu quis chamar /usr/bin/ssh-keygen -t ed25519 ...
de um dos meus serviços.
Naquele momento, minha chamada para ssh-keygen
é bloqueada até que systemd-random-seed.service
seja feita. Mas não é feita, chega ao tempo limite. Então, toda a inicialização leva muito tempo.
- Entendo
systemd-random-seed.service
que ele é responsável por iniciar o pool de entropia para aleatoriedade, por issossh-keygen
está bloqueado. - Mas, por que eles entram em dead lock? Eu esperaria
systemd-random-seed.service
terminar sem relação comssh-keygen
. - Antes das minhas alterações,
systemd-random-seed.service
demorava cerca de 16 segundos. (Posso ver usandosystemd-analyze blame
esystemd-analyze plot > chain.svg
. - Após minhas alterações, o tempo limite pode chegar a 10 minutos.
- Independentemente da minha mudança. Ou seja, sem adicionar
ssh-keygen
chamada a um dos meus serviços, tentei remover um dos meussysvinit
serviços. Fazer isso tornasystemd-random-seed.service
ainda mais imprevisível - termina após 2-6 minutos. - Meu propósito era reescrever meu
sysvinit
serviço como umsystemd
serviçoAfter=systemd-random-seed.service
, então ele certamente passará.
O ponto principal systemd-random-seed.service
não está claro para mim.
Você pode explicar o comportamento dele? Por que ele não inicia independentemente de ssh-keygen
?
Como posso iniciar outro serviço depois que ele termina?