Por que meu script funciona quando iniciado a partir do console, mas não funciona quando iniciado via upstart?

1

Estou executando o Ubuntu 12.04. Aqui está o que estou tentando fazer:

Copiei e adaptei um script de shell aqui: link . Ele escuta a porta UDP 9 para pacotes Wake-On-LAN. Quando recebe um pacote, ele deve iniciar o xbmc. Aqui está o script /home/myusername/.xbmc/autostarter:

#!/bin/bash
UDP_PORT=9          # Change this if you need to run this on a different port

START_PHRASE="E.....@"    
START_PHRASE_ESCAPED="E\.\.\.\.\.@"    

# The following block checks if the user running this script has the required      privileges to listen on the port specified above
WHO='whoami'
if [ "$WHO" != "root" ]; then
     echo "Cannot start unless running as root." >> /var/log/xbmc-starter.log
  exit 1
fi

echo "Listening on port $UDP_PORT for start command" >> /var/log/xbmc-starter.log

while [ true ]; do
     # Wait for a packet to come in
     LISTEN='tcpdump "udp port $UDP_PORT" -A -c 1 2>&1 | grep -o    "$START_PHRASE_ESCAPED"'
     # Make sure that we received the right command
     if [ "$LISTEN" = "$START_PHRASE" ]; then
        echo "Starting XBMC" >> /var/log/xbmc-starter.log
        /usr/bin/xbmc 
        echo "test log after command" >> /var/log/xbmc-starter.log
     fi
     # Sleep, to be nice, for unwanted rogue processes writing to our port
     sleep 1
done

Quando executo este script a partir da linha de comando com o sudo e envio o pacote WOL, ele funciona e inicia o xbmc.

sudo ./autostarter

A saída do log é:

Listening on port 9 for start command
Starting XBMC
test log after command

Mas quando eu o executo a partir de um script upstart, ele cria a mesma saída de log, mas não inicia o xbmc. Aqui está o meu script upstart xbmc-starter.conf:

# Starts a listener that runs the xbmc start script when a WOL package is received
description     "start xbmc wol listener script"
# runlevels
start on runlevel [2345]
stop on runlevel [!2345]
exec /home/myusername/.xbmc/autostarter

E a saída do log:

Listening on port 9 for start command
Starting XBMC
test log after command

Por que ele não inicia o XBMC?

    
por Arnold Franke 22.10.2014 / 20:59

2 respostas

0

Talvez adicionar env DISPLAY=:0 ao trabalho do Upstart ajudasse? Eu acho que o XBMC precisa ser capaz de saber qual display usar, sabe?

    
por CameronNemo 24.10.2014 / 06:30
0

Vou dar uma olhada, pois ninguém mais ofereceu uma resposta.

Tente alterar sua condição inicial para start on started tty1

Meu entendimento dos sistemas init é que eles começarão a programar em tempos estranhos, se você pedir. Pedir para começar nos níveis de execução pode significar no início desses níveis de execução, antes que qualquer outra coisa tenha começado. Como antes, coisas como qualquer parte do sistema de arquivos foram montadas e, certamente, antes de uma rede mínima estar disponível.

iniciar no iniciado tty1 irá esperar até que o primeiro terminal seja iniciado antes de iniciar o programa, que é basicamente o mesmo tempo que você seria capaz de executar / testar as coisas manualmente. Assim, o seu programa é iniciado mais tarde no processo de inicialização, mas você deve obter resultados mais consistentes.

    
por user7134 23.10.2014 / 05:50