executando o comando antes de o shtudown não funcionar

1

Eu criei um quiosque de servidor Ubuntu baseado em algum guia que encontrei e estou tentando parar o quiosque antes do desligamento. O quiosque está sendo iniciado automaticamente ou manualmente com o comando sudo start kiosk e pode ser interrompido ao executar sudo stop kiosk .

O código do quiosque reabrirá o navegador se estiver fechado. O resultado é que não consigo desligar o servidor porque ele continua criando novas sessões de navegador.

Eu tentei definir um script antes do desligamento que simplesmente executa sudo stop kiosk , mas ainda parece não funcionar.

O que eu fiz é o seguinte:

  1. criou um arquivo stop_kiosk.sh no diretório /etc/init.d .
  2. criou um link simbólico para o arquivo /etc/rc0.d/K00StopKiosk
  3. criou um link simbólico para o arquivo /etc/rc6.d/K00StopKiosk

No entanto, fecha a instância do navegador e abre imediatamente uma nova instância do navegador. Todas as outras sessões estão sendo fechadas e não posso continuar interagindo com o servidor, apenas com o navegador. Eu tenho que desligar manualmente o pc (usando virtualbox aqui, então eu simplesmente sair do virtualbox).

Se eu executar manualmente o sudo stop kiosk antes do desligamento, ele irá parar o quiosque, fechar o navegador e encerrar o openbox, xorg etc. Então, eu posso desligar com segurança e facilidade sem problemas.

Os arquivos de quiosque são os seguintes:

/opt/kiosk.sh:

#!/bin/bash

xset -dpms
xset s off
openbox-session &

while true; do 
    rm -rf ~/.{config,cache}/google-chrome/
    google-chrome --disable-translate \
                  --disable infobars \ 
                  --disable-suggestions-service \ 
                  --disable-save-password-bubble \
    --no-first-run 'http://google.com'
done

/etc/init/kiosk.conf:

start on (filesystem and stopped udevtrigger)
stop on runlevel [06]

console output
emits starting-x

respawn

exec sudo -u user startx /etc/X11/Xsession /opt/kiosk.sh --
    
por kfirba 11.06.2015 / 22:55

1 resposta

1

Você está usando /opt/kiosk.sh como seu arquivo de sessão para startx . Como esse script tem um loop infinito codificado, seu script reabrirá o navegador toda vez que for eliminado.

Em vez de usar while true , talvez seja melhor realizar uma verificação para verificar se esse serviço está sendo encerrado. Infelizmente, não estou familiarizado o suficiente com o upstart para saber qual condição de teste determinaria quando o sistema está sendo desligado. Algo como esse novo while loop pode ser suficiente (isso substitui o do script kiosk.sh ):

while [[ $(status kiosk) != */stopping* ]]

Esse loop espera o comando status kiosk retornar uma string contendo "/ stopping" e encerra o loop quando ocorre.

Espero que alguém com mais experiência em upstart possa corrigir minha implementação. :)

    
por 12.06.2015 / 00:25