昨天我成功地从 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