Por que não posso executar este script python como um trabalho no Ubuntu 12.04?

3

Normalmente eu faço isso:

cd /home/ubuntu/project/beta
python default.py -dev

Para iniciar o servidor web.py

Eu preferiria fazer isso:

sudo start beta

Aqui está meu /etc/init/beta.conf

setuid alex
setgid alex
script
  export HOME=/home/ubuntu/project
  cd $HOME/beta
  python default.py -dev
end script

Quando eu faço sudo start beta , ele inicia, mas fazer sudo status beta alguns segundos depois mostra que está parado. tail /var/log/syslog mostra kernel: [58023.somenumbers] init: beta main process (5460) terminated with status 134

Agora, se eu fizer python default.py -dev e, em seguida, echo $? , mostrar 0 - não entendo por que o código de saída acima está ocorrendo. A pasta beta e o conteúdo são de propriedade de alex: alex

Qualquer ajuda é apreciada!

    
por Alex Waters 21.12.2012 / 21:04

2 respostas

1

Os scripts * .conf não são scripts de shell, portanto, uma diretiva de interpretador de #!/bin/sh é APENAS um comentário não funcional nesse contexto.

Verifique se não há uma tarefa do sistema com o mesmo nome, "beta". Eu estou supondo que o .conf está em

/home/alex/.init/beta.conf

As tarefas do usuário realmente não devem precisar da parte setuid / setgid, a menos que você precise alternar o GID para uma que não seja o principal GID do usuário (mas está na lista como visto na saída do id (1) ).

O "cd / home / alex /" sugerido deve, de acordo com os documentos, ser "chdir / home / alex", omitindo também a barra final supérflua. Isso pode ajudar, mas a seção de script provavelmente será suficiente, embora a saída seja boa - talvez se concentrando em capturar a saída do cd (real) e o script pode ajudar, com:

script
  export HOME=/home/ubuntu/project
  {
     cd $HOME/beta
     python default.py -dev
  } > $HOME/beta/log 2>&1
end script

Muitos problemas relacionados a inicializações gerenciadas pelo sistema de tarefas como essa aparecem na saída de id (1) ou env (1), portanto, você pode adicionar essa linha logo antes da linha do python:

id ; env | sort

As contas pessoais dos usuários geralmente modificam a variável PATH, scripts extras de personalização e dotfiles que eles esquecem, e assim por diante, ou dependem das configurações de ambiente de .bashrc e similares que acontecem apenas durante logins totalmente interativos (.bashrc vs .bash_login e parentes e assim por diante).

Note que se o seu sistema tem um verdadeiro retro /bin/sh (improvável), a linha de exportação teria que ser escrita como:

HOME=/home/ubuntu/project ; export HOME

: -)

    
por 13.05.2013 / 09:35
0

2 possíveis problemas

  1. O script não tem uma linha de shell
  2. O diretório não é alterado ao iniciar script . Então, é possível que script esteja tentando gravar em algum lugar que precise de permissão de root.

Tente seguir

#!/bin/sh
setuid alex
setgid alex

#CD to alex home directory first so script can write output
cd /home/alex/

script
  export HOME=/home/ubuntu/project
  cd $HOME/beta
  python default.py -dev
end script
    
por 18.01.2013 / 21:18