定時実行
cron
USBカメラの画像を定期的にサーバにアップロードするために使用
簡易的な監視カメラが簡単にできます。(サーバまでのセキュリティはsshで確保、観覧のためのセキュリティは別途考えてください。)
crontabの設定はこんな感じ
motionで拾ったカメラ画像のlatestのファイル名を1個だけ拾って1分置きにscpでサーバの/tmp/test.jpgとしてアップロードする
* * * * * ls -1t /tmp/motion/*.jpg | head -1 | xargs -i scp -i ~/.ssh/privatekey -P 22 {} user@domain:/tmp/test.jpg
上記同様だが10秒置きに実行したい場合
* * * * * for i in `seq 0 10 59`;do (sleep ${i}; ls -1t /tmp/motion/*.jpg | head -1 | xargs -i scp -i ~/.ssh/privatekey -P 22 {} user@domain:/tmp/test.jpg) & done;
ちなみにmotionはデフォルトでlastsnap.jpgというシンボリックリンクを/tmp/motionに置いてくれるので、下記で良いことがわかった
* * * * * for i in `seq 0 10 59`;do (sleep ${i}; scp -i ~/.ssh/privatekey -P 22 /tmp/motion/lastsnap.jpg user@domain:/tmp/lastsnap.jpg) & done;
コマンド自動応答
expect
ラズパイからiRemocon Wi-Fiを制御しようと思った時に使用
iRemocon Wi-Fiは有線または無線LAN経由でのSocket通信によりデータを送受信します。そのため、コマンド送出→レスポンス受信→次のコマンド送出→レスポンス受信というシーケンスを繰り返すことになるため、ラズパイから制御する場合、expectが便利と判断しました。
ちなみに、iRemoconを有線LANで直接ラズパイに接続する場合は、ラズパイ側がDHCPサーバになる必要があります。
トリガ実行
incron
inotifyをcron風にして使いやすくした印象。
ファイルが置かれたあるいは更新された、削除されたことを契機にコマンドを実行できます。
motionによるカメラ画像もcronではなくこちらでも可能と思われます。
詳細の例は事情が有り書けないので上記キーワードで検索してみてください。
起動時コマンド実行・常駐化
/etc/rc.local
rootで実行したい場合。gpioの制御など何にも考えなくて済む(と書いた後で調べたら最近のRaspbianはpiユーザでもgpioアクセス可能らしい)。一番簡単だけどセキュアじゃない方法。
systemdに登録
Linuxの正統派。ちょっとめんどくさい。きちんとライフサイクルを考える必要あり。
プロセスが死んでも再起動してくれるようにする
forever
node.jsを使うときによく出てくるようだけど、それ以外でも利用可能(なはず)
upstart
使ったことないけど設定が簡単そうです。