编辑:

编辑:

昨天我成功地从 Ubuntu 服务器创建了一个信息亭。我将用它来擦一些不间断运行的 Web 应用程序。

然而,在某些情况下,由于大量的 js 动画,我担心它可能会冻结/不再响应,我也不会在那里做任何事情。

有没有办法在浏览器冻结后运行某些命令?目前,当操作系统启动时,它将自行触发信息亭,但如果我愿意,我可以通过以下方式手动启动和停止它:

bash
sudo start kiosk
sudo stop kiosk

所以我需要跑

bash
sudo stop kiosk

要关闭当前冻结的浏览器实例(希望它会杀死它,因为服务器没有图形,但是当我启动信息亭时,它会加载 openbox 和 xset 以查看浏览器,当我停止信息亭时,它会停止这些服务 -出色地)。

然后,我需要运行:

bash
sudo start kiosk

重新启动一切。

那么,一旦我以某种方式检测到浏览器是否冻结或没有响应,是否可以这样做?

编辑:

我的信息亭文件如下:

/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 --

答案1

浏览器在占用内存时通常会冻结。由于您在 kiosk 模式下运行,因此您可以找出浏览器的理想内存使用情况,以及在您观察浏览器时实际挂起时所占用的内存。

假设它在您工作时挂起 - 只需使用以下命令找出它占用的内存即可

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

现在你知道不应该逾越的界限了。

只需编写一个永远循环来持续监视 vsize,如果超过则重新启动它。 (本示例将该限制保持在 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

相关内容