Eu estou tentando iniciar uma aplicação Python em um sistema operacional Debian baseado em um roteador. Este aplicativo vem pré-compilado com pacotes de sites e um binário python. Como um ambiente virtual. O aplicativo é bastante grande (um servidor da Web), então não acho que haja um ponto em postá-lo aqui.
Eu criei um script init.d para iniciar o aplicativo na inicialização. O mesmo script que já usei em outros dispositivos para o mesmo aplicativo e nesses dispositivos estava funcionando. Infelizmente no roteador não e passei o dia inteiro descobrindo o porquê - mas agora estou desistindo e fazendo uma pergunta aqui.
Minimizei o script de inicialização para um mínimo que se parece com o seguinte
#!/bin/bash
### BEGIN INIT INFO
# Provides: Webserver
# Required-Start: $local_fs $remote_fs $syslog
# Required-Stop: $local_fs $remote_fs $syslog
# Should-Start: $network
# Should-Stop: $network
# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Description: ...
# Description: ...
### END INIT INFO
/path/to/python /path/to/main.py /path/to/configfile &
exit 0
O roteiro original era muito mais extenso que isso. Mas acho que isso deve fazer (?).
Eu criei links simbólicos nos diretórios rc*.d
corretos por meio de
update-rc.d webserver defaults
Eu verifiquei que eles foram realmente criados e foram.
Após uma reinicialização, nada acontece. O aplicativo não será iniciado. Se eu executar o script em um terminal, ele começa como deveria.
Eu tentei redirecionar a saída do comando para um arquivo de log. O arquivo será criado, mas está vazio. Então eu não sei se algum erro ocorre ao iniciá-lo na inicialização.
Apenas para testar, substituí o comando para iniciar o aplicativo com um script simples de shell infinito (e python) que imprime algo a cada segundo. Ambos os scripts estavam em execução depois que eu reiniciei a máquina.
Examinei todos os arquivos de log (não há muitos) em /var/log
, mas não consigo encontrar nenhum ponto de referência para o motivo do aplicativo não iniciar. E como o arquivo de log para o qual eu redireciono a saída está vazio, não sei o que pode falhar. Mas o arquivo de log definitivamente é criado depois que eu o removi. Então o comando é executado.
O que mais eu posso tentar encontrar o erro?
Editar:
Depois de ainda procurar pela resposta, encontrei uma possível solução que experimentei imediatamente no roteador. Foi dito que, se um aplicativo vem com um binário python, ele pode ser um ambiente virtual e, antes de iniciar o aplicativo, eu deveria executar o script activate
que pode ser encontrado nesse ambiente. Infelizmente, não há activate
vindo com esse servidor.