Execute o Python Server na inicialização

1

Tenho alguns servidores baseados em Python que preciso executar e gostaria que eles fossem iniciados automaticamente quando eu iniciasse minha caixa do Ubuntu Server. Qual é a melhor maneira de executá-los assim?

Eu estava esperando poder escrever um script Bash e usar a Tela para fazê-los rodar em segundo plano, onde eu posso verificá-los de vez em quando, mas onde

echo screen -d -m python

funciona 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 com backquotes? 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. O que é o modo de script Bash para fazer isso?

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

    
por DizzyDoo 26.12.2010 / 17:20

4 respostas

1

Sua falha porque sudo está solicitando uma senha. Como não há nenhum TTY aberto, ele está apenas esperando que você entre em um - ou pode, de fato, estar falhando instantaneamente. Se você estiver executando isso como root, não será necessário iniciá-lo como sudo.

No entanto, o que você provavelmente quer fazer é alterar tornadoDeploy.py para daemonizar a si mesmo - ou seja, separar-se, para que não seja executado com uma sessão aberta. A biblioteca python-daemonize fornece ferramentas fáceis para permitir que você faça isso. Isso elimina a necessidade de lidar com a tela, permitindo que você monitore o processo.

    
por 26.12.2010 / 17:30
1

Coloque

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

no arquivo /etc/rc.d/rc.local. Ou seja qual for o equivalente para a sua distribuição.

Assumindo que seu script é um daemon bem comportado e que você configurou o sudo para não requerer uma senha para executar seu script.

Leia esta sobre scripts de inicialização e este sobre uma biblioteca de daemon python. Além disso, você não precisa executar o tornado por trás de um servidor http real ?

    
por 26.12.2010 / 17:33
1

A maneira do Ubuntu (e 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 as instruções: link

Lembre-se de que tudo que é executado como root é uma possível vulnerabilidade de segurança, especialmente se outros usuários puderem modificá-lo.

    
por 26.12.2010 / 17:35
0

Se você executá-lo a partir do rc.local, você também precisa editar o / etc / sudoers e comentar esta string:

Padrões requiretty

    
por 26.12.2010 / 20:37