Dropbox が便利なので最近頼りにする事が多いです、各PC・デバイス間でのファイルのやりとり、設定ファイルなんかの簡単なバックアップ、共同制作者との成果物のやりとり...などなど。
最近は Dropbox にファイルをいれる事で動作するツールなんかを自前構築して使ってたりして、これが便利なのでメモがてら記事にしておきます。
まぁ多分ほかの人もやってる気がするんだけど、それっぽい解説記事がなかった。
なお、こちらの記事は Dropbox のファイル同期からサーバーサイドのコマンドを実行する方法でしか無い為、実際に稼動させるシステムは各自で用意するものとします。
Dropbox ドリブンとは
イベントドリブンとかメールドリブンとかみたいに、Dropbox を起点に動作するシステムなので Dropbox ドリブンと呼んでみました。
メールドリブンがそもそも、一般的な用語でないような気もしますが...
ユーザーが PC やモバイル端末から Dropbox の特定のディレクトリにファイルを追加する事で何らかのスクリプトが実行される、みたいな感じですかね。
例えば twitter なんかに写真を貼るサービスではメールで写真を添付して特定のメアドに送ると、それが紐づいたユーザーに添付した写真付き URL を post する、みたいな構造になっていますが、Dropbox のディレクトリに写真を要れる事でもそれが出来ます。
まぁ この例だとメールの方が向いてると思いますが、僕は例えばtxtファイルを突っ込むと1ページ1ページがエントリになったフィードを吐いてくれるだとか、動画ファイルを突っ込むと手持ちのデバイス向けの形式にエンコードしてくれる、だとかそういった使い方を想定しています。
導入方法
1, Dropbox へ登録する。
既にアカウントをお持ちの方は飛ばしていただいて構いません。
Dropbox - Dropbox へのご招待です。 - 生活をシンプルに
こちらから登録し、画面の指示に従って利用したい環境にクライアントソフトを導入します。
※なお、上記のリンクは紹介リンクになっている為、こちらから登録した人は一般の登録ページから登録した場合よりも容量が 250MB 多い状態で利用開始する事が可能です。
2, サーバーサイドの Dropbox を導入する
サーバー向けの Dropbox を手持ちのサーバーに導入します。
今は各ディストリビューション向けのパッケージが用意されているので導入も簡単ですね。
Dropbox - Dropbox のダウンロード - 生活をシンプルに
CUI 環境で利用している方向けに CLI Script もページ下部で提供されています。
具体的な使い方や導入方法はネット上に参考になる記事が既にある為、リンクを紹介するだけに留めます。
DropboxをLinuxで利用する方法 - maruko2 Note.
3, inotifywait コマンドの導入
コマンドラインからファイルシステムのイベント監視を行なうのに便利な inotify-tools を導入します。
上記の公式 GitHub ページに各ディストリビューションでの導入方法が記載されているので、それにしたがって導入してください。
だいたいパッケージ管理ツールから導入できるみたいなので、詰まる事はないかな?
4, ファイルの変動を監視するスクリプトを設置する。
inotifywait でファイルの変動を監視し、変動があった場合にファイルに対してアクションを実行するスクリプトを記述して設置します。
Linux 版の Dropbox はバックグラウンドで同期対象ファイルを保存した後に、当該ディレクトリに移動させる形でファイルの同期を実現しているようですので、inotifywait で監視すべきは 'moved_to' イベントのみとなります。
それを考慮して、自分の環境では以下のような形に実装しました。
#!/bin/bash my_input_path="/home/test/Dropbox/target/" my_script_path="/usr/local/script/" # fileが移動してくるのを待つ while inotifywait -e moved_to ${my_input_path}; do while true; do # 別のファイルを処理中の場合は待つ PID=`pgrep -f "{実行するコマンド}"` if [ -z $PID ]; then # zipファイルのリストを取得 LIST=`ls ${my_input_path}*.{txt,html} 2>/dev/null | head -n 1` if [ -z "$LIST" ]; then # 無かったら出る break fi cd ${my_script_path} {実行するコマンド} "$LIST" //不要になったファイルを削除 rm -f "$LIST" fi sleep 20 done done
普段あまりサーバーを弄る立場にないので、イマイチこの辺 他の環境だとどういうサンプルを出せばいいのか分からないので、
補完してくれる人が出てくるといいなぁと思います。
(このサンプルの無駄な部分修正してくれる人も歓迎
このサンプルでは処理後のファイルを削除していますが、 mv コマンドに置き換えて移動させておくとかでも構いません。
※ちなみに rm で削除されてしまったファイルも Dropbox の Web UI から復帰可能。
また、拡張子txt,htmlのみを対象とする感じになっていますので、適宜利用したいファイル形式に書き換えてご利用ください。
システム対象ディレクトリの共有
Dropbox の面白い点は、仲間内でディレクトリそのものを共有できる点にあります。
仲間内で成果物を持ち寄って作業するような場合、それらを通知したりするようなシステムを構築したり 色々と使い道はあるんじゃないですかね。
コメントする