2011-06-27 7 views
3

純粋なHTMLで書かれた1ページのアプリケーションが、外部のプラグインやクライアント用のフルスクリーンクロムを使用して作成されています。 (キオスクモード)クロムプロセスのモニタリング方法は?クラッシュすると再起動する

クロム自体は非常に小さなクラッシュで非常に安定していますが、実際にクラッシュした場合は、ページに再開してもらいたいと思います。

私はこれをウォッチドッグのような外部プロセスで行うべきだと考えましたが、外部モニタのクロムはどうですか?プロセステーブルには複数の個別プロセスが存在するためです。時にはそれがクラッシュしても、プロセスはまだそこに生きています。

どのような提案や成熟したsoutuionですか?

答えて

0

私はちょうどこれを自分で解決しました。最初はプロセスAPIを使用しようとしましたが、キオスクで使用しているChromeのバージョンではありません。私は他のもの(TUIOタッチ入力など)を処理するために書いた拡張機能を使って自分のキオスクを構成しました。そのため、私は既にそれを追加する場所がありました。

私のキオスクでは、ファイルを表示するクロムが見つかったため、ローカルの小さなWebサーバーが動作しています。// URLは首の痛みが大きすぎます。ファイル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と言っていましたが、これについて考えると、受信ページの遅さにはもう少し頑強になります。

あなたのキオスクがLinuxであると仮定すると(それはあなたが気違いではない)、キオスクにssh'ingしてps axfww |grep renderを実行し、リストされている最初のプロセスを強制終了するだけで簡単にテストできます。あなたは病気のコンピュータの画面が1秒間表示され、それから再び読み込まれます。

関連する問題