Reinicie um aplicativo se ele congelar

0

Ontem consegui fazer um quiosque do Ubuntu Server. Eu vou usá-lo para esfregar alguns aplicativos da web que serão executados sem parar.

No entanto, em alguns casos, duo a muita animação js, tenho medo de que ela possa congelar / não responder mais e não vou estar lá para fazer nada.

Existe uma maneira de executar alguns comandos quando o navegador congela? Atualmente, quando o sistema operacional for iniciado, ele ativará o quiosque por conta própria, mas se eu quiser, posso iniciar e pará-lo manualmente com:

bash
sudo start kiosk
sudo stop kiosk

Então, precisarei executar

bash
sudo stop kiosk

Para fechar a instância atual do navegador freezed (esperamos que ele o mate, pois o servidor não tem gráficos, mas quando eu inicio o quiosque ele está carregando o openbox eo xset para ver o navegador, quando eu paro o quiosque ele para aqueles serviços também).

Então, precisarei executar:

bash
sudo start kiosk

Para relançar tudo.

Então é possível fazer isso uma vez que eu de alguma forma detectar se o navegador congelou ou não respondeu?

Editar:

Meus 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 --kiosk --no-first-run  'http://thepcspy.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 / 06:32

1 resposta

1

Os navegadores congelam normalmente quando roubam memória. Como você está executando no modo de quiosque, pode descobrir o uso de memória ideal pelo navegador e também a memória que está recebendo quando realmente fica suspensa enquanto a observa.

Digamos que ele seja interrompido quando você estiver trabalhando - apenas descubra a memória que está usando

    ps -eo vsize,pid | grep <pid of the browser>

Agora você sabe o limite que não deve ser ultrapassado.

Basta escrever um loop contínuo que monitore o vsize e, se exceder, reinicie-o. (este exemplo mantém esse limite em 12345)

    while true; do
        browser &
        p=$!
        echo "browser restarted with pid $p"
        while true; do
            sleep 1
            x='ps -eo vsize,pid | grep $p | head -1 | awk '{print $1}' '
            echo "memory is $x"
            if [ "$x" -gt "12345" ]
              then
                kill -9  $p
                break
            fi
        done
    done
    
por 11.06.2015 / 07:55