bash脚本如果因错误关闭则重新加载浏览器

时间:2015-11-17 17:12:31

标签: bash shell raspberry-pi2

我在屏幕上运行Raspberry Pi 2来显示网站。 Epiphany浏览器有时会意外关闭。

我试图创建一个脚本,如果它失败了将重新加载浏览器,我遇到的问题是有后续运行的xdotool命令我无法找到放置的位置。

这是我到目前为止所做的:

#!/bin/bash

until epiphany "http://localhost/index.php" ; do
echo "Service 'epiphany' crashed with exit code #?. Respawning..." >&2
sleep 1
done

此脚本运行,打开浏览器,如果进程被终止,将重新加载浏览器。我需要以下内容才能开始运行:

sleep 10
xdotool search --class epiphany windowactivate
xdotool key F11

这使顿悟全屏显示

while ps ax | grep -v grep |epiphany ; do
sleep 60
echo "Refreshing page"
xdotool search --class epiphany windowactivate
xdotool key F5
done

一分钟后刷新屏幕,每60秒重复一次。

我没有刷新网页的原因是,如果网络中断,它会在找不到网页的情况下将屏幕空白而不会再次重试。

感谢您的阅读。

2 个答案:

答案 0 :(得分:1)

您可以将它们组合成一个脚本。 这将是合并文件:

combined.sh:

#/bin/bash

epiphany "http://localhost/index.php" &
sleep 10
xdotool search --class epiphany windowactivate
xdotool key F11

while ps ax | grep -v grep |epiphany ; do
sleep 60
echo "Refreshing page"
xdotool search --class epiphany windowactivate
xdotool key F5
done

service.sh

#/bin/bash

until combined.sh ; do
echo "Service 'epiphany' crashed with exit code #?. Respawning..." >&2
sleep 1
done

我正在做这件事,并没有覆盆子来测试,但它应该工作。第一个脚本不会停止直到顿悟关闭,当它关闭时,combined.sh会再次执行。

答案 1 :(得分:1)

这是我最终提出的解决方案:

screen.sh

ko.bindingHandlers.typeahead = {
        init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
            var substringMatcher = function (strs) {
                return function findMatches(q, cb) {
                    var matches, substringRegex;

                    // an array that will be populated with substring matches
                    matches = [];

                    // regex used to determine if a string contains the substring `q`
                    substrRegex = new RegExp(q, 'i');

                    // iterate through the pool of strings and for any string that
                    // contains the substring `q`, add it to the `matches` array
                    $.each(strs, function (i, str) {
                        // console.log(str);
                        if (substrRegex.test(str)) {
                            // the typeahead jQuery plugin expects suggestions to a
                            // JavaScript object, refer to typeahead docs for more info

                            matches.push({
                                value: str
                            });
                        }
                    });

                    cb(matches);
                };
            };
            var $element = $(element);
            var allBindings = allBindingsAccessor();
            var source = ko.utils.unwrapObservable(valueAccessor());
            var items = ko.utils.unwrapObservable(allBindings.items) || 4;

            var valueChange = function (item) {
                allBindings.value(item);
                return item;
            };
            debugger;
            $element.attr("autocomplete", "off")
                    .typeahead({
                            hint: true,
                            highlight: true,
                            minLength: 0,
                            selectable: 'Typeahead-selectable'
                    }, {
                            valueKey: 'value',
                            source: substringMatcher(source),
                            items: items,
                            updater: valueChange
                    });
        }
    };

web.sh

#!/bin/bash
if [ -a /home/pi/.config/epiphany/session_state.xml ];
     then
     rm /home/pi/.config/epiphany/session_state.xml;
fi

epiphany "http://localhost/index.php" &
sleep 10
xdotool search --desktop 0 --class epiphany-browser windowactivate
xdotool key F11

while ps ax |grep -v grep| grep epiphany; do
sleep 30
xdotool search --desktop 0 --class epiphany-browser windowactivate
xdotool key F5
done

如果您终止顿悟的pid,它将在下一个刷新周期(30秒)重启浏览器。

如果您关闭浏览器,它将退出该过程。