tech::hexagram

personal note for technical issue.

Mac OSXで特定のディレクトリ配下の内容の変更を監視してコマンド実行する

launchctlを使うとお手軽に出来るみたいなのでメモ。

  <?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  <plist version="1.0">
      <dict>
          <key>Label</key>
          <string>hoge.huga</string>
          <key>ProgramArguments</key>
          <array>
              <string>/bin/bash</string>
             <string>any command</string>
         </array>
         <key>WatchPaths</key>
         <array>
             <string>any paths</string>
         </array>
         <key>StandardOutputPath</key>
         <string>any output path</string>
         <key>StandardErrorPath</key>
         <string>any error path</string>
     </dict>
 </plist>
  • ProgramArguments : 実行したいコマンドを記述する。array内で、スペース区切りのコマンドをstringで記述する
  • WatchPaths : 変更を監視したいディレクトリやファイルを記述する。
  • StandardOutputPath : 標準出力のログを吐くパスを指定
  • StandardErrorPath : エラーのログを吐くパスを指定

いろいろ調べててincronだったりfseventだったり出てきたけど、上手く動かなかったのとunloadの方法がよくわからなかったのでこれが一番お手軽かつ確実かと。

タワレコの会員登録でメアドパス忘れ

タワレコのネット会員登録しようとしたら既に会員になっていた事案が発生。 5年以上前にガラケーから登録してたらしい。

ガラケー辿って会員ページ見に行ったら登録していたメアドが確認できてそこから芋づる式に記憶辿ってパスワード思い出してなんとか回避できた。危なかった…

これだからまだまだガラケー捨てられない。

VagrantのCentOS7の仮想環境で、ansibleがデフォルトの状態では動かなかった

仮想環境の構成管理をchefからansibleに乗り換えようと決意したものの、 デフォルトだとansible -m ping すら出来ない状況に。

以下の様なエラーが出ていた。

$ ansible development -m ping -i hosts -vvvv -c ssh
<192.168.33.10> ESTABLISH CONNECTION FOR USER: vagrant
<192.168.33.10> REMOTE_MODULE ping
<192.168.33.10> EXEC ssh -C -tt -vvv -o ControlMaster=auto -o ControlPersist=60s -o ControlPath="/Users/jun_hashimoto/.ansible/cp/ansible-ssh-%h-%p-%r" -o Port=22 -o IdentityFile="/Users/jun_hashimoto/.ssh/vagrant_id_rsa" -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=vagrant -o ConnectTimeout=10 192.168.33.10 /bin/sh -c 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-1446302545.64-29176121780452 && chmod a+rx $HOME/.ansible/tmp/ansible-tmp-1446302545.64-29176121780452 && echo $HOME/.ansible/tmp/ansible-tmp-1446302545.64-29176121780452'
<192.168.33.10> PUT /var/folders/b1/xvrmxy3x5q144lzzrxg081jr0000gn/T/tmp8Y12_A TO /home/vagrant/.ansible/tmp/ansible-tmp-1446302545.64-29176121780452/ping
192.168.33.10 | FAILED => failed to transfer file to /home/vagrant/.ansible/tmp/ansible-tmp-1446302545.64-29176121780452/ping:

Connection closed

イメージには puppetlabs/centos-7.0-64-puppet を利用していたのだが、調べているとCentOS5, 6ではSFTPが無効になっているらしい。

tagomoris.hatenablog.com

立ち上げた仮想環境の /etc/ssh/sshd_config の中身を見ると以下のように、sftpに関する記述があった。

# File is managed by Puppet

AcceptEnv LANG LC_*
ChallengeResponseAuthentication no
GSSAPIAuthentication no
PermitRootLogin yes
PrintMotd no
Subsystem sftp /usr/lib/openssh/sftp-server
UseDNS no
UsePAM yes
X11Forwarding yes

記述があるにも関わらずpingが通らないのはおかしい、sftpのPATHはどうなってるのかと思って調べてみると、configに記載されているpathがなんと間違えていた。。

$ sudo find / -type f -name sftp-server
/usr/libexec/openssh/sftp-server

lib から libexec に修正し、sshdを再起動したらping通った。

$ ansible development -m ping -i hosts -vvvv
<192.168.33.10> ESTABLISH CONNECTION FOR USER: vagrant
<192.168.33.10> REMOTE_MODULE ping
<192.168.33.10> EXEC ssh -C -tt -vvv -o ControlMaster=auto -o ControlPersist=60s -o ControlPath="/Users/jun_hashimoto/.ansible/cp/ansible-ssh-%h-%p-%r" -o IdentityFile="/Users/jun_hashimoto/.ssh/vagrant_id_rsa" -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=vagrant -o ConnectTimeout=10 192.168.33.10 /bin/sh -c 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-1446303504.31-126139414242133 && chmod a+rx $HOME/.ansible/tmp/ansible-tmp-1446303504.31-126139414242133 && echo $HOME/.ansible/tmp/ansible-tmp-1446303504.31-126139414242133'
<192.168.33.10> PUT /var/folders/b1/xvrmxy3x5q144lzzrxg081jr0000gn/T/tmpjtkKIl TO /home/vagrant/.ansible/tmp/ansible-tmp-1446303504.31-126139414242133/ping
<192.168.33.10> EXEC ssh -C -tt -vvv -o ControlMaster=auto -o ControlPersist=60s -o ControlPath="/Users/jun_hashimoto/.ansible/cp/ansible-ssh-%h-%p-%r" -o IdentityFile="/Users/jun_hashimoto/.ssh/vagrant_id_rsa" -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=vagrant -o ConnectTimeout=10 192.168.33.10 /bin/sh -c 'LANG=en_US.UTF-8 LC_CTYPE=en_US.UTF-8 /usr/bin/python /home/vagrant/.ansible/tmp/ansible-tmp-1446303504.31-126139414242133/ping; rm -rf /home/vagrant/.ansible/tmp/ansible-tmp-1446303504.31-126139414242133/ >/dev/null 2>&1'
192.168.33.10 | success >> {
    "changed": false,
    "ping": "pong"
}

んもー…

4年目の健康診断とか

一昨日だった。

  • 身長 : 173.9cm 変化なし
  • 体重 : 63.6kg +3.7kg
  • 視力 : あんま変わらず両目1.2
    • 実感として正直測定値ほど見えている気がしない
  • 血圧 : 上がちょっと上がった。1回測定ミスってテンパったのかもしれない

内科の担当医のおっちゃんがそっけなさすぎてちょっと萎えた。 食生活ちょっと脂っこい方に寄ってるから血液検査が心配。 あと最近食後喉に食い物が少し詰まったような感覚あるから病院行ったほうが良いような気がしないでもない

前回書いていた陰陽座のラジオcron録音は上手く動いていた。 ただブログに書いてあった放送時間が間違っていて最後尻切れトンボになってた。20分じゃなくて25分らしい…

陰陽座の新ラジオ番組をRadikoで予約録音する

mttb.jugem.jp

先日、瞬火blogで紹介があり、TOKYO FM陰陽座の新しいラジオ番組がスタートしたそうだ。 時間は水曜25:30-25:50(つまり木曜1:30-1:50)と遅く、リアルタイムの拝聴をすると翌日が平日なのでキツイ。

初回は聞き逃してしまったので、なんとかしてcronで自動録音できるすべを探ってみた。

Radikoを使う

Radikoは、インターネット経由でラジオを聞けるサービスだが、いろいろ調べているとスクリプトで録音ができるらしい。

kyoshiaki.hatenablog.com

これを使って、MBP経由で録音する。

事前準備

$ brew install wget rtmpdump swftools libxml2 ffmpeg

スクリプトの実行に必要なライブラリをbrew経由でインストール。 インストール中、brewとgitのversionが古かったことに起因するエラーが表示されたので、そちらもアップデートした。

現在の手元のhomebrewとgitのバージョンは以下のとおり。

$ brew --version
0.9.5 (git revision 60140; last commit 2015-10-09)

$ git --version
git version 2.5.3

試しに録音する

をダウンロードし、適当なディレクトリに配置。

まず先に、エリア情報シェルスクリプトを使って、TOKYO FMのidを確認する。

$ radiko_curl_area.sh

神奈川県はJP14.xml と思われるので、中身を確認する。

129  <station>
130     <id>FMT</id>
131     <name>TOKYO FM</name>
132     <ascii_name>TOKYO FM</ascii_name>
133     <href>http://www.tfm.co.jp/</href>
134     <logo_xsmall>http://radiko.jp/station/logo/FMT/logo_xsmall.png</logo_xsmall>
135     <logo_small>http://radiko.jp/station/logo/FMT/logo_small.png</logo_small>
136     <logo_medium>http://radiko.jp/station/logo/FMT/logo_medium.png</logo_medium>
137     <logo_large>http://radiko.jp/station/logo/FMT/logo_large.png</logo_large>
138 <logo width="124" height="40">http://radiko.jp/v2/static/station/logo/FMT/124x40.png</logo>
139 <logo width="344" height="80">http://radiko.jp/v2/static/station/logo/FMT/344x80.png</logo>
140 <logo width="688" height="160">http://radiko.jp/v2/static/station/logo/FMT/688x160.png</logo>
141 <logo width="172" height="40">http://radiko.jp/v2/static/station/logo/FMT/172x40.png</logo>
142 <logo width="224" height="100">http://radiko.jp/v2/static/station/logo/FMT/224x100.png</logo>
143 <logo width="448" height="200">http://radiko.jp/v2/static/station/logo/FMT/448x200.png</logo>
144 <logo width="112" height="50">http://radiko.jp/v2/static/station/logo/FMT/112x50.png</logo>
145 <logo width="168" height="75">http://radiko.jp/v2/static/station/logo/FMT/168x75.png</logo>
146 <logo width="258" height="60">http://radiko.jp/v2/static/station/logo/FMT/258x60.png</logo>
147 <feed>http://radiko.jp/station/feed/FMT.xml</feed>
148 <banner>http://radiko.jp/res/banner/FMT/20150930211427.jpg</banner>
149 </station>

TOKYO FMのidは FMT

$ rec_radiko.sh FMT 1 data

引数は以下の順番で定義されている。

$ rec_radiko.sh <channel_name_id> <minutes> <outputdir>

これでTOKYO FMの音源が録音されていればOK。

crontabで定期実行する

$ sudo launchctl unload /System/Library/LaunchDaemons/com.vix.cron.plist
$ sudo launchctl load /System/Library/LaunchDaemons/com.vix.cron.plist

launchctlを起動した後、crontabに録音スクリプトの実行内容を記述する。

$ crontab -l
29 1 * * 4 cd /path/to/script;/bin/bash -l ./rec_radiko.sh FMT 22 data

今回は上記の内容で記述した。