EPGStation v2 で epg updater is disconnected が発生する
はじめに
EPGStation を Mac の 外付けSSD に入れて動かしているんですけど、たまに、意図しない取り外しが発生してたりするんですよね。
(内蔵SSD をアダプタで挿してるからですかね?)
まぁ、そんなこんなで、取り外しが発生すると、大体アクセスできなくなって落ちるで済むんですけど、たまにタイトルの通り epg updater is disconnected
が発生したりするんですよね。
で、1回やらかしたときのことを忘れて、また調べる羽目になったので、メモります。
(Mirakcタグを付けましたが、関係するのは最後のおまけだけです)
原因
人によっては察しているかと思いますが、チャンネルなりプログラムなり、DBが壊れます。
というわけで、これを修正すれば直ると思います。
(今のところ、プログラムのDBが壊れたパターンしか知らないのですが(というか前回を忘れたので)、もしかしたら、もっとヤバいパターンがあるかもです)
調査/直し方
基本的には、DBが壊れているだけなので、下記の記事を参照すればおk。
デフォルトでは(多分) EPGStation/logs/EPGUpdater/system.log に、システム的なログが出ているハズです。
今回は、[ERROR] system - update programs error
というエラーが出ていました。
ので、program あたりが壊れているのでしょう。
というわけで、確認。(パスはいい感じにしてください)
sqlite3 /Volumes/RecServSSD2/EPGStation/data/database.db "SELECT COUNT(*) FROM program"
メモ取り忘れちゃったので、何が出てたか忘れましたが、
Error: stepping, database disk image is malformed (11)
みたいなのが出るハズ。(記事からパク引用)
なので、修復。
sqlite3 /Volumes/RecServSSD2/EPGStation/data/database.db ".recover" | sqlite3 /Volumes/RecServSSD2/EPGStation/data/database_recovery.db
引用記事にありますが、dumpじゃダメらしいですね。
で、あとは置き換えたら終わり。
上のコマンドあたりで、ちゃんと修復できたか確認すれば良いでしょう。
おわりに
チューナーの続きをやりたいのに、時間が無い、とかしてたら、別のトラブルが発生してしまいました。
過去の自分がメモって無かった所為で、history から対処方法を思い出すとかいう、めんどくさいことをやる羽目に……。
ちゃんと備忘録を置いておきましょう。
チューナーは、そのうち、頑張りたい……。
それはそれとして、Macくんが、2.5GbeのUSBの変換アダプタを使ってNASと直結すると、断続的に切れるとかいう謎現象を発生させていて、それはそれで困っています。
(なぜか1.0Gbeなら問題ないっぽいんですよねぇ……)
(Realtekのチップセットが悪いのでは、という噂)
それも対処しなきゃ……。
おまけ
EPGStation + Mirakc で運用しているのですが、
[ERROR] system - event stream get error
[ERROR] system - Error: operationId "getEventsStream" is not found.
at Client.call (/Volumes/RecServSSD2/EPGStation/node_modules/mirakurun/lib/client.js:111:19)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
[ERROR] system - destroy event stream
と煩かったので、対応しました。
EPGStation/src/model/epgUpdater/EPGUpdater.ts の 72行目あたりについて、
startEventStreamAnalysis() の Mirakurun の EventStream を取得するための箇所を
/**
* mirakurun の event stream 解析開始
* stream に問題が発生した場合は this.isEventStreamAlive が false になる
*/
private async startEventStreamAnalysis(): Promise<void> {
// this.isEventStreamAlive = true;
// try {
// await this.updateManage.start();
// } catch (err: any) {
// this.log.system.error('destroy event stream');
// this.isEventStreamAlive = false;
// }
this.isEventStreamAlive = false;
}
な感じで、コメントアウトしてしまえばいいです。
どうせ、this.updateManage.start()
の先で、エラーをキャッチして返しているので。
(EPGUpdateManageModel.ts の 194行目 を呼び出しますが、201行目でthrow err
し、206行目でerror時の処理をし、その先はEvent Streamを取れた場合の処理なので)
というわけでオマケでした。
Mirakcで録画すれば良く無い?は、それはそうなので、出来る人はそうしましょう。
番組名録画予約の方法がよくわからんので、やってません。
そのうちやりたいです。
Discussion