Execute o servidor Python na inicialização

Execute o servidor Python na inicialização

Eu tenho alguns servidores baseados em Python que preciso executar e gostaria que eles iniciassem automaticamente quando eu iniciar minha caixa do Ubuntu Server. Qual a melhor forma de executá-los assim?

Eu esperava poder escrever um script Bash e usar o Screen para executá-los em segundo plano, onde posso verificá-los de vez em quando, mas onde

echo screen -d -m python

funciona muito bem,

echo screen -d -m `sudo python /home/matt/tornadoServer/tornadoDeploy.py`

não, sem mensagens de erro. Isso tem algo a ver com os espaços? Mesmo que eu tenha cercado aspas? Eu também tentei:

WEB="screen -d -m `sudo python /home/matt/tornadoServer/tornadoDeploy.py`"
echo $WEB

Como forma de escapar dos espaços, mas sem sorte. Qual é a maneira de script do Bash fazer isso?

E, uma vez que o script Bash funcione, onde posso colocá-lo para executá-lo na inicialização?

Responder1

Está falhando porque sudoestá solicitando uma senha. Como não há TTY aberto, ele está apenas esperando que você insira um - ou pode, na verdade, falhar instantaneamente. Se você estiver executando isso como root, não será necessário iniciá-lo como sudo.

No entanto, o que você provavelmente deseja fazer é alterar o tornadoDeploy.py para se daemonizar - ou seja, para se desconectar, para que não seja executado com uma sessão aberta. Obiblioteca python-daemonizefornece ferramentas fáceis para permitir que você faça isso. Isso elimina a necessidade de lidar com a tela, ao mesmo tempo que permite daemonizar o processo.

Responder2

Colocar

sudo -n python /home/matt/tornadoServer/tornadoDeploy.py &

no arquivo /etc/rc.d/rc.local. Ou qualquer que seja o equivalente para sua distribuição.

Supondo que seu script seja um daemon bem comportado e que você configurou o sudo para não exigir uma senha para executar seu script.

Leressesobre scripts de inicialização eessesobre uma biblioteca daemon python. Além disso, você não precisa executar o tornadoatrás de um servidor http real?

Responder3

A maneira do Ubuntu (e do Debian) de fazer com que os aplicativos iniciem no momento da inicialização é transformá-los em serviços do sistema usando update-rc.d - veja aqui para obter instruções:http://www.debuntu.org/how-to-manage-services-with-update-rc.d

Lembre-se de que qualquer coisa executada como root é uma vulnerabilidade de segurança potencial, especialmente se outros usuários puderem modificá-la.

Responder4

Se você executá-lo em rc.local, também precisará editar /etc/sudoers e comentar esta string:

Requisitos padrões

informação relacionada