サーバー環境更新(PT3 ドライバー変更)†
Ubuntu 24.04 Server†
PT3 Upstreamドライバー†
- 何もドライバーを追加ンストールしなくても PT3がDVB デバイスとして認識 されている
- DVB デバイスを使って録画する(従来の recpt1 は使わない)
(重要) mirakurun は root としてインストールする†
- channel 設定ファイル [#y7843082]
(重要) mirakurun は 一般ユーザー としてインストールする†
サーバー設定(今回変更)†
- ルールファイルが勝手に?変更され、録画済みのファイルが消える問題を解析していた仮定で、リバースプロキシー経由で外部からアクセスされている懸念 が浮上
- 以下のアクセス情報の変更を実施後に症状が改善された。→ ということは?
「設定ダウンロードに失敗しました」 エラーへの対処†
- 発生時のログ( ~/git/EPGStation/logs/Service/system.log
[2024-12-28T12:01:10.563] [INFO] system - config.yml read success
[2024-12-28T12:01:10.755] [INFO] system - SocketIO Server has started.
[2024-12-28T12:01:10.759] [FATAL] system - uncaughtException: Error: listen EADDRINUSE: address already in use 0.0.0.0:8986
[2024-12-28T12:01:21.817] [FATAL] system - uncaughtException: Error [ERR_IPC_CHANNEL_CLOSED]: Channel closed
- lsof で該当ポート(8986)を利用しているプロセスを確認する
- ポートが利用中というエラーだがゾンビプロセスとなった apach2 がポートを開放していない
[KGB2] munakata:~/git/EPGStation/logs$ sudo lsof -i :8986
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 2590 root 19u IPv6 19756 0t0 TCP *:8986 (LISTEN)
apache2 6740 www-data 18u IPv4 56285 0t0 TCP kgb2:59178->kgb2:8986 (CLOSE_WAIT)
apache2 6742 www-data 18u IPv4 45800 0t0 TCP kgb2:59220->kgb2:8986 (CLOSE_WAIT)
apache2 6743 www-data 18u IPv4 61566 0t0 TCP kgb2:59174->kgb2:8986 (CLOSE_WAIT)
apache2 6764 www-data 18u IPv4 53031 0t0 TCP kgb2:59228->kgb2:8986 (CLOSE_WAIT)
apache2 7049 www-data 18u IPv4 60770 0t0 TCP kgb2:59180->kgb2:8986 (CLOSE_WAIT)
apache2 8728 www-data 18u IPv4 56621 0t0 TCP kgb2:59196->kgb2:8986 (CLOSE_WAIT)
apache2 8729 www-data 18u IPv4 56288 0t0 TCP kgb2:59224->kgb2:8986 (CLOSE_WAIT)
apache2 8731 www-data 18u IPv4 53028 0t0 TCP kgb2:59210->kgb2:8986 (CLOSE_WAIT)
「設定ダウンロードに失敗しました」 エラーへの対処(決定版)ChatGPTが全部教えてくれた†
リバースプロキシ設定の見直し†
EPGStation の停止†
[KGB2] munakata:~$ sudo pm2 stop epgstation
[PM2] Applying action stopProcessId on app [epgstation](ids: [ 1 ])
[PM2] [epgstation](1) ✓
┌────┬──────────────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │
├────┼──────────────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 1 │ epgstation │ default │ 2.10.0 │ fork │ 0 │ 0 │ 2 │ stopped │ 0% │ 0b │ root │ disabled │
└────┴──────────────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
Module
┌────┬──────────────────────────────┬───────────────┬──────────┬──────────┬──────┬──────────┬──────────┬──────────┐
│ id │ module │ version │ pid │ status │ ↺ │ cpu │ mem │ user │
├────┼──────────────────────────────┼───────────────┼──────────┼──────────┼──────┼──────────┼──────────┼──────────┤
│ 0 │ pm2-logrotate │ 2.7.0 │ 60454 │ online │ 0 │ 0% │ 67.7mb │ root │
└────┴──────────────────────────────┴───────────────┴──────────┴──────────┴──────┴──────────┴──────────┴──────────┘
8986番ポートの開放†
[KGB2] munakata:~$ sudo lsof -i :8986
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 60654 root 19u IPv6 317072 0t0 TCP *:8986 (LISTEN)
[KGB2] munakata:~$ sudo kill -9 60654
[KGB2] munakata:~$ sudo lsof -i :8986
EPGStation の再起動†
[KGB2] munakata:~$ sudo pm2 start epgstation
[PM2] Applying action restartProcessId on app [epgstation](ids: [ 1 ])
[PM2] [epgstation](1) ✓
[PM2] Process successfully started
┌────┬──────────────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │
├────┼──────────────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 1 │ epgstation │ default │ 2.10.0 │ fork │ 82603 │ 0s │ 2 │ online │ 0% │ 16.6mb │ root │ disabled │
└────┴──────────────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
Module
┌────┬──────────────────────────────┬───────────────┬──────────┬──────────┬──────┬──────────┬──────────┬──────────┐
│ id │ module │ version │ pid │ status │ ↺ │ cpu │ mem │ user │
├────┼──────────────────────────────┼───────────────┼──────────┼──────────┼──────┼──────────┼──────────┼──────────┤
│ 0 │ pm2-logrotate │ 2.7.0 │ 60454 │ online │ 0 │ 0% │ 68.5mb │ root │
└────┴──────────────────────────────┴───────────────┴──────────┴──────────┴──────┴──────────┴──────────┴──────────┘
自動リカバリースクリプト†
sudo chmod +x /usr/local/bin/epgstation-recover.sh
sudo crontab -e
*/5 * * * * /usr/local/bin/epgstation-recover.sh
Mirakurun の Docker 化†
- Mirakurun が pm2 サポートを終了し、Docker コンテナ実行だけをサポートするようになった。
- Docker 化された Mirakurun と pm2 起動の Epgstation を組み合わせて実行することは何も問題ない
サーバー全体の挙動不安定に起因する録画サーバーの不動作の解析†
- systemd-journald の状態異常
これはファイルシステムよりも、/run または journald が使用する Unix domain socket の破損・リソース枯渇・名前空間の問題である可能性が高いです。
- /run は tmpfs 上なので、リブートで揮発するデータに依存
- journald のデータベースファイル (/var/log/journal/...) 破損の可能性も考慮すべき
- systemd-journald が Watchdog 通知を送信できないまま長時間動作しているのは明らかに異常
- 対策
- ① journald のログ格納先をバックアップ・削除
sudo mv /var/log/journal /var/log/journal.bak
sudo mkdir /var/log/journal
sudo systemd-tmpfiles --create --prefix /var/log/journal
sudo systemctl restart systemd-journald
- ② 再起動時の fsck を強制的に実行
sudo touch /forcefsck
sudo reboot
- この対応によりサーバーの異常が解消され、録画エラーも解決したように見えている
- 問題の背景(systemd の cgroup/scopes が壊れている)
- Ubuntu 22.04 + Docker + systemd で以下のような悪循環が発生している
- /run や cgroup2 namespace が破損 → journald のユニット制御不能
- journald → systemd に状態通知不可(WATCHDOG=1 送れない)
- systemd → Docker scope 割り当て失敗
- すべてのサービス操作が 25秒タイムアウトで詰まる
- このパターンは 再起動で回復することがあるが、fsck や systemd の再整備をしないと再発する という非常にやっかいな状態です。
- 長期的対策(このような状況が定期的に再発するようであれば)
- journald → rsyslog 等への切り替え検討
- カーネルバージョン(6.8.0-60)と systemd バージョンの互換性も疑ってみる価値あり
- また、NVMeのコントローラドライバ不整合や udev 問題も稀に関連するのでカーネルログ全体の追跡も推奨