EPGStation + mirakc の組み合わせで予約録画まで間があるときに積極的にサスペンドします。
- そもそもの話としてサスペンド運用は非推奨です
- Mirakurunではその挙動から問題となる可能性があります
- ここに示しているのはあくまでも作者環境での実装例ですので、他の環境での動作保証はしません
- システム起動10分後から10分おきにサスペンドするかどうかチェック
- 以下条件のどれかに当てはまる場合にはサスペンドしないでそのままチェックを抜ける
- 誰かがターミナル等でログイン中
- 録画ファイル(*.m2ts)にアクセス中
- チューナーデバイス利用中
- よく使われるであろうデバイスはとりあえず指定しておきました
- ffmpeg実行中
- 録画中
- 20分以内に録画予定あり
- サスペンド時間が10分以下
- 復帰時刻は直近録画予定の2分前にしてサスペンド
- 復帰後にNTPでシステムクロック同期とEPGStationのタイマーリセット
- Wake-on-LANなどで強制復帰した場合も同様
- Debian 11 amd64
- 以下パッケージを利用
- lsof
- chrony
- curl
- jq
- 以下パッケージを利用
- EPGStation 2.*
- mirakc 3.*
# apt-get install lsof chrony curl jq
# cp suspend.sh /usr/local/sbin
# chmod +x /usr/local/sbin/suspend.sh
# cp resume.sh /usr/local/sbin
# chmod +x /usr/local/sbin/resume.sh
# cp suspend.service /etc/systemd/system
# cp suspend.timer /etc/systemd/system
# cp resume.service /etc/systemd/system
# systemctl enable suspend.service
# systemctl enable suspend.timer
# systemctl enable resume.service
- サスペンドチェック間隔を変えたい
- suspend.timer の
OnUnitActiveSec
- suspend.timer の
- 次回予約が20分以上あるかどうかの時間を変えたい
- suspend.sh の
NEXT_REC_START_MARGIN_SECOND
- suspend.sh の
- 復帰が直近録画予定の2分前なのをもっと余裕を持たせたい
- suspend.sh の
NEXT_REC_START_BEFORE_SECOND
- suspend.sh の
- 特定プロセス実行中ならサスペンドしたくない
- suspend.sh の
if pgrep ffmpeg; then
付近を参考に
- suspend.sh の
systemdでは自身の機能以外でのサスペンド実行では復帰後のunit実行の面倒を見てくれません。
resume.sh が実行されないのは致命的です。
px4_drvを組み込んだままサスペンドすると復帰不能となってしまったので、サスペンド直前にpx4_drvをアンロードし復帰直後にロードし直すunit作りました。
# cp px4-sleep.service /etc/systemd/system
# systemctl enable px4-sleep.service