Should I migrate the scripts to systemd format?
Sim.
Você está sendo mordido por uma falha bem conhecida nos scripts System 5 rc
. Não é realmente nada a ver com o systemd. Você poderia ter atingido a falha se tivesse conseguido iniciar os scripts em paralelo de alguma outra forma, como por exemplo com startpar
.
É bem conhecido que o grepping da saída de ps
é propenso a raças, tanto contra grep
quanto contra o estado do sistema em andamento, e pode-se encontrar décadas de pessoas relatando acertar essas mesmas falhas e mais uma vez com scripts de shell diferentes. É maluco e equivocado, e mencionado na seção "BUGS" da página de manual do BSD para ps
. O mundo deveria saber melhor agora.
O mundo sabe melhor e já existe há algum tempo. Tivemos gerenciadores de serviço que funcionam corretamente, sem todos esses mecanismos que envolvem a lista de processos e arquivos que podem ou não conter o número correto, desde o início dos anos 90. Você deve definitivamente , se você está sendo atingido por esta e outras condições de corrida, jogue fora esses scripts System 5 rc
frágeis, propensos a falhas, idiossincráticos e confusos e use o gerenciamento de serviço adequado. Nenhum ifs; Sem desculpas; não há "soluções rápidas" nas caixas que você já está usando (os grep
s extras sendo eles mesmos uma loja em primeiro lugar).
Existem muitos desses gerenciadores de serviços disponíveis. Você não tem para usar o systemd. Os vários scripts que alguém escreveria para runit, nosh ou perp são tão simples quanto os arquivos unitários que se escreveria para o systemd.
Na maneira mais prática e sistemática de fazer as coisas, você não tem os dois serviços principais procurando e executando o secundário. Esse é o trabalho do sistema de gerenciamento de serviços. Em vez disso, simplesmente declara uma dependência dos dois serviços primários no secundário, para que o sistema de gerenciamento de serviços saiba que, quando for solicitado a iniciar Agentdaemon.service
e Securitydaemon.service
, ele deverá iniciar common.service
também. Em unidades de serviço do systemd, isso seria uma configuração Requires=
ou Wants=
.
Leitura adicional
- Shlomi Noach (2009-10-01). Como NÃO testar se o mysqld está vivo code.openark.org.
- Jonathan de Boyne Pollard (2015). A família dos daemontools . Respostas frequentemente dadas.
- Jonathan de Boyne Pollard (2014). Uma análise lado a lado dos scripts e serviços de execução unidades. . Respostas frequentemente dadas.
- Lennart Poettering (2013-10-07).
systemd.unit
. páginas de manual do systemd. freedesktop.org. - Greg Wooledge. "O risco de analisar a árvore de processos" . Gerenciamento de Processos . O Wiki de Greg.