【问题标题】:Chromium process monitoring methods? Restart if crashes铬过程监控方法?崩溃时重启
【发布时间】:2011-09-23 05:18:45
【问题描述】:

我有一个用纯 HTML 编写的单页应用程序,没有外部插件,并为客户端使用全屏铬。 (信息亭模式)

虽然 Chromium 本身非常稳定,崩溃很小,但如果它真的崩溃了,我希望它重新启动到页面。

我认为这应该通过像看门狗这样的外部进程来完成,但是外部监视器如何镀铬?因为进程表中有几个单独的进程。有时即使它崩溃了,该进程仍然存在。

有什么建议或成熟的soutuion?

【问题讨论】:

    标签: linux google-chrome process chromium


    【解决方案1】:

    我自己解决了这个问题。起初我尝试使用进程 API,但这不是我在自助服务终端上使用的 chrome 版本。我已经使用我编写的扩展程序配置了我的信息亭以处理其他内容(TUIO 触摸输入等),所以我已经有了添加它的地方。

    我的信息亭在本地运行一个小型 Web 服务器,因为我发现让 chromium 显示 file:// 网址实在是太让人头疼了。如果您使用的是文件 URL,那么您的清单将需要匹配这些,而不是 http URL。

    这是 manifest.json 中的关键内容:

    "content_scripts": [
        {
            "matches": ["http://*/*"],
            "js": ["kiosk.js"]
        }
    ],
    
    "background": {
        "scripts": [
            "background.js"
        ]
    },
    
    "permissions": [
        "webNavigation",
        "tabs",
        "runtime",
        "<all_urls>"
    ],
    

    这进入 kiosk.js:

    chrome.runtime.onMessage.addListener(
        function(message, sender, response) {
            response(message);
        }
    );
    

    基本上,它是一个 ping 响应器。如果您向它发送消息,它会立即返回。

    这里是完整的 background.js:

    var tab_id = -1;
    var send_count = 0;
    var recv_count = 0;
    
    chrome.webNavigation.onBeforeNavigate.addListener(function (details) {
        tab_id = details.tabId;
    });
    
    setInterval(function() {
        if (tab_id == -1) return;
        if (send_count > recv_count+2) {
            chrome.tabs.reload(tab_id);
            send_count = recv_count = 0;
        }
        ++send_count;
        chrome.tabs.sendMessage(tab_id, "heartbeat", function(resp) {
            if (resp) {
                recv_count = send_count;
            }
        });
    }, 1000);
    

    它会监听我的页面是否出现,并获取标签 ID。它对响应者执行 ping 操作。文档说如果发生错误, sendMessage 将被调用而没有响应,但事实并非如此。它实际上根本没有被调用。我对其进行了编码以处理任何一种情况。

    请注意,我最初在处理程序中说 ++recv_count,但是如果您考虑一下,上面的内容对于接收页面的缓慢性会更加健壮。

    假设您的 kiosk 是 linux(也就是说,您并没有发疯),那么您可以通过 ssh 进入您的 kiosk 并执行 ps axfww |grep render 然后终止列出的第一个进程来轻松地进行测试。你会看到生病的电脑屏幕一秒钟,然后它会重新加载。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-18
      • 2013-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-27
      相关资源
      最近更新 更多