Como executar comandos adicionais em um script de inicialização do Linux depois de iniciar um processo

1

Eu estou tentando escrever um script de inicialização que executa um aplicativo (MapProxy) após uma reinicialização do servidor. Meu servidor roda o Ubuntu 11.04 Natty 64 bit.

No script, executo um script python exec python /$path/"config.py" & que cria com êxito um fcgi.socket com o qual o servidor da Web pode se comunicar. No entanto, eu preciso fazer fcgi.socket gravável ou MapProxy não vai funcionar ou seja, eu preciso agir um chmod sobre ele.

Parece que depois de executar o config.py, perco o controle dentro do script de inicialização - ele não faz o fcgi.socket gravável. Alguma idéia?

#! /bin/bash
:
exec python /$path/"config.py" &
exec chmod o+w /$path/"fcgi.socket" &
exit 0
    
por Jason 29.05.2012 / 17:53

3 respostas

3

Novo script:

#! /bin/bash
python /$path/"config.py" &&
chmod o+w /$path/"fcgi.socket"

& envia um processo para o segundo plano e executa o próximo processo imediatamente. & & aguarda o valor de retorno do último processo e, se for zero, o próximo processo será iniciado.

Remover seu exit 0 é para que você obtenha o código de erro de qualquer processo executado por último no script. Deve ser zero, mas dessa forma ele será propagado se você tiver um erro.

    
por 29.05.2012 / 18:01
1

Remova os símbolos exec s e & . Isso adia o processamento para o segundo plano para que o próximo comando possa ser executado imediatamente. Na verdade, você está alterando as permissões em um arquivo que ainda não existe, já que leva algum tempo para o primeiro comando executar e criar o soquete.

    
por 29.05.2012 / 17:57
0

O bit importante que parece estar faltando é o que a parte exec está fazendo. De help exec do bash: "Substitua o shell pelo comando especificado". Quando você diz exec python /$path/"config.py" , seu script basicamente diz "Eu terminei aqui, vamos deixar o python pegá-lo daqui, executar este script python, e o que ele retorna é o que eu retorno". Então, nada mais tarde no script será executado. Não faz sentido usar saída, a menos que seja a última coisa que o seu script faz.

Você tem "exit 0" no final deste script que diz "meu script deve terminar como se tudo fosse bem-sucedido, não importando o que mais poderia ter falhado". se isso é realmente o que você quer, então você não quer usar exec, já que seu código de saída de scripts será o código de saída de qualquer processo que você execute. Em vez disso, você pode querer retornar um resultado de falha real de python ou chmod se você obtiver um.

    
por 29.05.2012 / 18:18