SSD化+ファンレス化したTS-112Pの温度が気になったので、自分自身の共有フォルダに記録できるようにしてみました。
1.基本方針
ZabbixやSNMPサーバがあれば定期ポーリングして温度を記録・監視できそうな気がしますが、あいにく環境がないので別の方法を考えることにします。以下の2ポイントをを実現したいところ。WebUIで取得できているのでLinuxとしてもどこかに出力されているでしょう。
- TS-112P単体で記録可能
- 後からグラフ化しやすいフォーマットで保存
2.コマンド単体でCPU温度を取得してみる
/procディレクトリ配下を覗いてみたところCPU温度は以下のコマンドで取得可能でした。
# cat /proc/tsinfo/systemp 53
3.コマンド単体でSSDの温度を取得してみる
SSDの温度は/proc配下には記録されていないようですが、SMARTで温度を拾えそうな気がするので試してみます。デフォルトで以下のパスにSMARTコマンドが設置されているので「-d」オプションでディスクナンバーを指定してみます。
# /sbin/get_hd_smartinfo -d 1 005 Reallocated_Sector_Ct 0 100 100 000 OK 009 Power_On_Hours 1285 100 100 000 OK 012 Power_Cycle_Count 7 100 100 000 OK 165 Unknown_Attribute 2490388 100 100 000 OK 166 Unknown_Attribute 0 100 100 000 OK 167 Unknown_Attribute 70 100 100 000 OK 168 Unknown_Attribute 1 100 100 000 OK 169 Unknown_Attribute 657 100 100 000 OK 170 Reserve_Block_Count 0 100 100 000 OK 171 Program_Fail_Count 0 100 100 000 OK 172 Erase_Fail_Count 0 100 100 000 OK 173 Unknown_Attribute 0 100 100 000 OK 174 Unexpected_Power_Loss 5 100 100 000 OK 184 End_To_End_Error 0 100 100 000 OK 187 Uncorrectable_Errors 0 100 100 000 OK 188 Unknown_Attribute 0 100 100 000 OK 194 Temperature_Celsius 45 055 048 000 OK 199 UDMA_CRC_Error_Count 0 100 100 000 OK 230 Head_Amplitude 17179869188 100 100 000 OK 232 Available_Reserved_Space 100 100 100 004 OK 233 Media_Wearout_Indicator 476 100 100 000 OK 234 Uncorrectable_ECC_Count 502 100 100 000 OK 241 Lifetime_Writes_From_Host 494 253 253 000 OK 242 Lifetime_Reads_To_Host 993 253 253 000 OK 244 Unknown_Attribute 0 000 100 000 OK
17行目「Temperature_Celsius」行の3列目がSSDの温度と思われます。awkで整形して温度だけを取り出してみます。
# /sbin/get_hd_smartinfo -d 1 | awk 'NR==17{print $3}' 45 または # /sbin/get_hd_smartinfo -d 1 | grep Temp | awk '{print $3}' 45
4.取得時間とあわせて出力してみる
グラフ化のために温度とあわせて取得時間を記録したいので、awkとstrftime()関数で時刻を整形します。
# cat /proc/tsinfo/systemp| awk '{print strftime("%Y/%m/%d %H:%M:%S"), $0}' 2019/06/24 00:10:53 53 # /sbin/get_hd_smartinfo -d 1 | awk 'NR==17{print strftime("%Y/%m/%d %H:%M:%S"), $3}' 2019/06/24 00:13:00 45
これらのコマンド実行結果を別々のファイルに記録してもよいのですが、CPUとSSDの温度をセットでグラフ化したいので1行目にまとめます。SSDの温度はgrepで
いろいろな方法があるようですが今回はsetを使ってみます。またCSVファイルとして開きやすいように列の区切り記号に「,」を使用します。
set -- $(cat /proc/tsinfo/systemp; /sbin/get_hd_smartinfo -d 1 |awk 'NR==17{print strftime("%Y/%m/%d %H:%M:%S"), $3}'); echo "$2,$3,$4,$1" 2019/06/26,00:06:33,42,50
5.TS-112Pのhomeフォルダにファイルを保存する
このコマンド結果を、PCから簡単にアクセスできる場所にcsvファイルで保存しようと思います。QTSの共有フォルダは/shareディレクトリ配下に実ディレクトリへのシンボリックリンクが作成されているので、この中の任意のディレクトリを指定して保存します。
set -- $(cat /proc/tsinfo/systemp; /sbin/get_hd_smartinfo -d 1 |awk 'NR==17{print strftime("%Y/%m/%d %H:%M:%S"), $3}'); echo "$2,$3,$4,$1" >> /share/homes/risca/document/temp/`date +%Y%m`_qnaptemp.csv
エクスプローラで共有フォルダ「home」にアクセスし、コマンドで作成したCSVファイルが表示されることを確認します。
6.cronで定期的に実行できるようスクリプト化する
ここまでくればもう少しで完成です。自作スクリプトを実行するためのautorunディレクトリの中にスクリプトファイルを作成し実行権限を付与します。
autorunディレクトリの作成方法はこちらを参考にしてください。
# vi /share/HDA_DATA/.qpkg/autorun/ts112temp.sh
#!/bin/sh
PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin:/usr/bin/X11:/usr/local/sbin:/usr/local/bin
export PATH
set -- $(cat /proc/tsinfo/systemp; /sbin/get_hd_smartinfo -d 1 |awk 'NR==17{print strftime("%Y/%m/%d %H:%M:%S"), $3}'); echo "$2,$3,$4,$1" >> /share/homes/risca/document/temp/`date +%Y%m`_qnaptemp.csv
# chmod +x /share/HDA_DATA/.qpkg/autorun/ts112temp.sh
# cd /share/HDA_DATA/.qpkg/autorun/
[/share/HDA_DATA/.qpkg/autorun] # ll
drwxr-xr-x 2 admin administ 4.0k Jun 4 00:28 ./
drwxrwxrwx 7 admin administ 4.0k Jun 23 05:08 ../
-rwxr-xr-x 1 admin administ 1.2k Jun 4 00:28 autorun.sh*
-rw-r--r-- 1 admin administ 1.2k Dec 14 2016 autorun.sh.bak
-rwxr-xr-x 1 admin administ 295 Jun 3 23:18 ts112temp.sh*
最後に作成したスクリプトをcronに追加します。「crontab -e」で登録するとTS-112P再起動のたびに設定が消えてしまうので、元ファイルの「/etc/config/crontab」にts112temp.shを5分毎に実行する設定を追加します。
# echo */5 * * * * /share/HDA_DATA/.qpkg/autorun/ts112temp.sh >> /etc/config/crontab
# cat /etc/config/crontab
# m h dom m dow cmd
...
0-59/20 3 * * * /sbin/adjust_time
+ */5 * * * * /share/HDA_DATA/.qpkg/autorun/ts112temp.sh
0 9,21 * * * /sbin/notify_update -s -p 1>/dev/null 2>&1
...
cronを再起動し、追加した設定を読み込みます。
# /etc/init.d/crond.sh restart
7.定期的に温度を取得できているか確認
しばらく時間をおいてからCSVファイルを開いてスクリプトが5分毎に実行されているか確認します。