Atributos de aplicativo se iniciado a partir do init.d?

2

Eu tenho um programa (binário pré-compilado) que, quando iniciado manualmente no linux, roda bem. Tem uma CLI que eu uso para inserir comandos. Este programa é um roteador de software, posso conectar-me a ele para ajustar suas configurações.

No entanto, se eu quiser iniciá-lo no momento da inicialização, o programa vai muito devagar, de modo inusitado. Se houver informação sendo impressa na tela, por exemplo, ela será impressa em partes, como se houvesse um baudrate lento, esse tipo de coisa. Todo comando que eu digito é assim, as informações são impressas muito lentamente.

O que poderia estar acontecendo, o que é diferente de mim executando isso manualmente após a inicialização, em vez de iniciar com o S99 ou algo assim? Se eu parar o processo e reiniciá-lo manualmente, funciona bem.

Este script python é o chamado do init.d:

import subprocess
application_pidfile = "/var/run/application.pid"
command_line=["start-stop-daemon", "-q", "-p", application_pidfile, "-S",
              "-m", "-b", "-x", "/bin/application"]
subprocess.call(command_line)

O que eu imagino é por que ainda estaria indo devagar uma hora após a inicialização? No entanto, se eu apenas pará-lo e iniciá-lo manualmente, ele funcionará bem, mesmo alguns segundos após o boot? Mesmo se eu definir um atraso, como iniciar esse processo alguns minutos após a inicialização, o mesmo problema ocorre.

Poderia ser iniciado em algum modo de "soquete" lento ou algo assim?

    
por Paul 01.04.2014 / 15:30

1 resposta

1

Sistemas init modernos, como systemd e upstart, executam vários threads de execução, e mesmo com o init original, as coisas podem ser bifurcadas durante o processo de boot (você já disse que o seu faz, por exemplo).

Isso significa que seu processo está sendo executado ao mesmo tempo que outros processos, e qualquer resultado será intercalado com os seus:

   Process 1 says "I'm here"
   Process 2 says "I'm here"
   Process 1 says "Doing my thing..."
   Process 3 says "I'm here"
   Process 3 says "Doing my thing..."
   Process 1 says "Still busy..."
   Process 2 says "Doing my thing..."

Observe que o pedido aqui é aleatório além da prioridade de início; um S05 irá começar antes de um processo S70 , mas quando eles terminarem um em relação ao outro é indeterminado, a menos que um preenchimento seja um pré-requisito específico do outro.

Se você já fez alguma programação segmentada, você estará familiarizado com esta corrida de cavalos. Como os processos estão sendo executados simultaneamente, eles não se entrelaçam de maneira ordenada - por isso, no meu exemplo, Process 3 consegue fazer várias coisas antes que processos iniciados anteriormente façam o equivalente. Etc. Isso é apenas acaso e não será o mesmo o tempo todo.

A inicialização é um tempo ocupado para o sistema - muitas coisas estão acontecendo ativamente de uma só vez. Portanto, se você comparar o tempo de execução para executar o processo sozinho, ele será mais lento, porque no último caso ele não terá que competir com muitos (ou, em termos significativos, nenhum) outros processos ativos.

    
por 01.04.2014 / 16:19