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 sudo
está 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