LoginSignup
3
3

More than 5 years have passed since last update.

Chinachu環境で待機時間はシャットダウンさせる

Last updated at Posted at 2016-05-20

はじめに

Chinachu環境で待機時間はシャットダウンさせる方法です。Ubuntu 14.04の一般ユーザー(この場合tvユーザー)でテストしています。

謝辞

これを作るにあたって録画サーバー向けスクリプトと設定 · GitHubを大いに参考にさせていただきました。おもな変更点は次の通りです。

  • 次の録画時間から起動にかかる時間を減ずる処理をchinachuNextからautoshutdownに移した。
  • autoshutdown
    • 次の録画時間まで6分あればシャットダウン(35分→6分)。
    • 次の録画時間の3分前に起動(5分→3分)。
    • 録画中、Sambaファイルロック中、SSH接続中のほかに、SMPlayer起動中もシャットダウンしなくした。
      • SSH接続判定において、デスクトップ環境でログオンしていてもシャットダウンするようにした(ptsで絞り込み)。
    • 環境をbashに決め打ちした。
    • ネストをなくした。
    • ログ出力機能を追加した。
    • chinachuNextを同じディレクトリから読むようにした。
    • 次回起動時間の設定にrtcwakeを使用した。
  • chinachuNext
    • IPアドレスを決め打ちしなくてもすむように、localhostを参照するようにした。

準備

シャットダウン・起動テスト

これを実行して3分後に起動することを確認します。

NOW=$(date +%s) &&
WAKEUPTIME=$(($NOW + 180)) &&
echo "NOW:        $NOW $(date --date @$NOW --iso-8601=seconds)" &&
echo "WAKEUPTIME: $WAKEUPTIME $(date --date @$WAKEUPTIME --iso-8601=seconds)" &&
sudo rtcwake -m off -t $WAKEUPTIME

ディレクトリ構成

  • home
    • tv
      • cron
        • autoshutdown #本体
        • chinachuNext #次の録画時間を返す(要Python3)
        • crontab #cronの設定ファイル

autoshutdown

  • 次の録画時間までが6分(360秒)より長ければシャットダウン。
  • 録画時間の3分前(180秒)に起動。
  • chinachuNextはスクリプトと同じディレクトリに配置。
  • LOG=trueでスクリプトと同じディレクトリにログを出力。
  • デスクトップ環境を前提に、SMPlayerを起動しているときはシャットダウンしない。
#!/bin/bash
LOG=true # LOG=true LOG=false

REALPATH=$(cd $(dirname $0) && pwd)

# -lt <     -le <=     -eq =     -ne !=
[ 1 -lt $(ps aux | grep 'recpt1' | wc -l) ] && exit
[ 0 -lt $(sudo smbstatus -L | grep -E ' (EXCLUSIVE\+BATCH|EXCLUSIVE|BATCH|LEVEL_II) ' | wc -l) ] && exit
[ 1 -lt $(ps aux | grep 'smplayer' | wc -l) ] && exit
[ 1 -lt $(ps aux | grep '/usr/bin/mpv' | wc -l) ] && exit
[ 0 -lt $(who | grep ' pts/' | wc -l) ] && exit

NOW=$(date +%s)
NEXTTIME=$(python3 "$REALPATH/chinachuNext")
WAKEUPTIME=$(($NEXTTIME - 180))
INTERVAL=$(($NEXTTIME - $NOW))

[ $INTERVAL -lt 360 ] && exit

$LOG && echo "$(date --iso-8601=seconds) shutdown WAKEUPTIME: $(date --date @$WAKEUPTIME --iso-8601=seconds)" >> $REALPATH/autoshutdown.log
sudo rtcwake -m off -t $WAKEUPTIME

2016年9月10日、いろいろ修正しました。旧バージョンだとシャットダウンしなかったかも…。

chinachuNext

#!/usr/bin/env python3

from urllib.request import urlopen
import json
import io
import time

class Reserves:
    def __init__(self, url):
        response = urlopen(url)
        self.o = json.load(io.TextIOWrapper(response, response.getheader('content-type').split('charset=')[1]))

    def getNextTime(self):
        now = time.time()
        for e in [ int(ent['start'] / 1000) for ent in self.o if ent['start'] / 1000 > now ]:
            return e

if __name__ == '__main__':
    url = 'http://localhost:10772/api/reserves.json'
    print(Reserves(url).getNextTime())

crontab

10分に一回、autoshutdownを実行します。

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow command
*/10 *  * * *   ~/cron/autoshutdown

crontabを反映

crontab ~/cron/crontab

テスト実行

chmod 700 ~/cron/chinachuNext && chmod 700 ~/cron/autoshutdown && ~/cron/autoshutdown
3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3