Upstart não inicia corretamente o serviço (ou mata instantaneamente)

2

Estou tentando usar o upstart para iniciar um daemon no evento "input-device-added", no entanto, se alguém souber de um método diferente para iniciar algo no mesmo evento que não envolva o Upstart, ficarei muito satisfeito também. De qualquer forma, quando o evento input-device-added é emitido, o myservice.conf é chamado corretamente e as primeiras linhas do script são analisadas. Mas quando o daemon é iniciado, ele nunca começa a rodar completamente e o Upstart aparentemente o mata prematuramente.

Eu tentei usar o Upstart de duas maneiras diferentes, ambos me dão o mesmo problema:

author "AnVoWiDo"
start on input-device-added
script
device='printinputdevices | grep thecorrectdevice'
echo $device 
/start/my/daemon -option device
end script

e também

author "AnVoWiDo"
start on input-device-added
exec myscript.sh

onde o arquivo myscript.sh contém o script acima. O comando echo lá é apenas para diagnósticos e saídas corretamente em ambos os métodos.

Executar myscript.sh do terminal iniciará o daemon perfeitamente com toda a saída esperada. O mesmo é verdade para executar o comando "/ start / my / daemon -option device", ambos irão mostrar algo ao longo das linhas de

device 0: /dev/input/event9 mydevice
Display name: :0

Mas ao iniciá-lo a partir do Upstart (com service myservice iniciado ou conectando um novo dispositivo de entrada) a saída é interrompida no meio 'Display name:: 0' e somente logs 'Display name:' no qual o Upstart mata o processo. Parece-me que o cólon duplo na saída é o culpado (ou, é claro, o: 0), e talvez o Upstart o confunda com um tipo de código de erro?

Alguém sabe de um método diferente de iniciar meu serviço no momento correto? Talvez eu tenha perdido algo estúpido e óbvio ao fazer o arquivo conf do Upstart que pode ser consertado? Por fim, talvez o Upstart possa, de alguma forma, ser convencido a ignorar o ":: 0" na saída (se essa for a causa, é claro) e continuar executando o daemon?

    
por AnVoWiDo 01.12.2011 / 13:44

2 respostas

2

Nome de exibição: 0 está se referindo a um display X. Ele funciona no seu terminal GUI porque $ DISPLAY está definido como: 0.

Se você quer que o serviço inicie na sua GUI, então você deve fazer

env DISPLAY=":0"
exec /start/my/daemon
    
por SpamapS 10.12.2011 / 08:17
2

Upstart executa o script como root, que provavelmente não tem o conjunto de ambientes DISPLAY (demonstrado pela depuração do seu script: Display name: <empty> . Quando você executa o script a partir da linha de comando, DISPLAY é obtido da conta de usuário env sendo definido corretamente.

Você pode usar a resposta do SpamapS para adicionar o DISPLAY ao ambiente de trabalho ou executar o comando com exec su - <your account> ... .

    
por Tuminoid 23.01.2012 / 08:49