めも(cron、XPath、awk)

cron

前からcronは使いたかったのだけど、なぜか使えなくて諦めてた。GPUの温度を定期的に測るために使おうと思って調べてたらなんとか使えたのでメモ。

minute hour dat month dayofweek command

の形式で書く。
上のURLに書いてある事もまとめて、注意点は

  • Ubuntuの場合は出力を捨てないとちゃんと動かないみたい。 > /dev/null 2>&1 を最後につける。
  • 環境変数は(ほとんど?)セットされてないので、自分でセットするか、フルパスでファイル名を指定。
  • パスの指定に~が使えない。~aontでもダメのようだ。/home/aontとしないとだめ。
  • GnomeSchedulerを使うと便利かもしれない。(気休め?)

XPath

GPUの情報の出力がXMLなのでRubyで処理することにした。RubyXMLを処理するときはREXMLが便利なのだが、今までいちいち子ノードのうちでこういう条件のものを探してきて…という処理をRubyで書いていた。それではどうしてもコードが汚くなってしまう。XPathというXMLのQuery式を使えば綺麗にかける。たとえばこんな感じ

//nvidia_smi_log/gpu[product_name/text()='Tesla C2050']/temperature/gpu_temp

これは日本語で言い換えると、何個かある//nvidia_smi_log/gpuのうちで、その下のproduct_nameのtextがTesla C2050であるもの(gpu)の下の/temperature/gpu_tempを指している。途中の[ ]は述語と言うらしく、限定修飾の関係代名詞のようなもの。これをRubyで書いたらとても長ったらしいコードになってしまうが、XPathを使えばこんなに簡単に書ける。すばらしい。C#LINQとかSQLとかもこういうふうに書くのかな。

awk

awkはテキスト形式のテーブルデータを処理するためのプログラムと言えば合ってるかな。
awkもちゃんと使いこなしたら数値データの解析に便利なのだろうと思いながら敬遠していた。
これを読んだらなんとなく分かってきた。