linuxのfind -mtimeの挙動で失敗したのでメモ
今回はlinuxのfindコマンドのmtimeオプションで失敗したのでメモするために書きました。
今回失敗したこととしては、ファイルの削除cronを回しているときにfindコマンドを使って-mtimeオプションで時間を指定して削除処理をおこなっていました。 しかし、消しては行けないフォルダまで消してしまったので色んな問題が発生しました。
本題
- これが初期状態です。
[vagrant@localhost test]$ ll -a memo/ total 8 drwxrwxr-x 2 vagrant vagrant 4096 Feb 2 2002 . drwxrwxr-x 3 vagrant vagrant 4096 Jan 14 18:50 .. -rw-rw-r-- 1 vagrant vagrant 0 Jan 14 18:45 aaaa.txt -rw-rw-r-- 1 vagrant vagrant 0 Jan 14 18:45 bbb.txt
- 削除処理を実行
[vagrant@localhost test]$ find memo/ -mtime -1 | xargs rm -rf
- 削除結果
[vagrant@localhost test]$ ls -a memo/ . ..
ここまでは想定通りの結果だったので問題なかったのですが、問題は次の処理になります。
[vagrant@localhost test]$ ls -a memo/ . .. [vagrant@localhost test]$ ll -a total 12 drwxrwxr-x 3 vagrant vagrant 4096 Jan 14 19:05 . drwx------. 5 vagrant vagrant 4096 Jan 14 18:50 .. drwxrwxr-x 2 vagrant vagrant 4096 Feb 2 2002 memo
- memoフォルダが空になっている状態で下記の処理を実行すると
[vagrant@localhost test]$ find memo/ -mtime -1 | xargs rm -rf
[vagrant@localhost test]$ ll -a total 8 drwxrwxr-x 2 vagrant vagrant 4096 Jan 14 19:01 . drwx------. 5 vagrant vagrant 4096 Jan 14 18:50 ..
なんと!!! memoフォルダまで消えてしまいました・・・・orz
補足
補足ですが上記のケースを回避するには
フォルダを指定するときに*を指定してやれば・・・
[vagrant@localhost test]$ find memo/* -mtime -1 | xargs rm -rf find: `memo/*': No such file or directory
[vagrant@localhost test]$ ll -a total 12 drwxrwxr-x 3 vagrant vagrant 4096 Jan 14 19:05 . drwx------. 5 vagrant vagrant 4096 Jan 14 18:50 .. drwxrwxr-x 2 vagrant vagrant 4096 Feb 2 2002 memo
この通りフォルダは削除されずに済みます!
いやー、知らない事がいっぱいあると再度実感したました。
resqueのworkerがoverviewで表示されるのにサーバ側ではプロセスが存在しないから調べてみた
resqueのoverviewでよく分からないworkerが存在していたので、killしようと奮闘していた話です。 ドキュメント残すついでに書いてみました。
発見時
サーバでプロセスを確認
ps aux | grep resque
おらんやん!!
なんやこのプロセス・・・・
調べてもよく分からなかったので、友人に相談・・・
「redisにkey残ってるだけじゃね?」と言われたので、
redisの中を見てみると・・・・!?
redis-cli keys keys resque*
おったー!!!
結論
redisのkeyに残っており、それが表示されてたみたいです。
まだまだredisとresqueについての知識(ggr力も)がまだまだ足りてないなと反省しました。
教えてくれた友人に感謝してますmm
nginxのアップロードモジュールを使ってみた
大容量のファイルを扱うことがあったので、どうしようかなと調べているとnginxに便利なモジュールがあったので紹介します!!
入れてみて感じたメリット
細かいことはあまりわかっていませんが、1Gのメモリしか積んでいないマシンに1.5Gほどのファイルをアップロード出来たのでめっちゃ感動しました!!
インストール
mkdir /usr/local/src/nginx mkdir /usr/local/src/nginx-upload-module/ git clone https://github.com/nginx/nginx.git usr/local/src/nginx git clone -b 2.2 /usr/local/src/nginx-upload-module /usr/local/src/nginx-upload-module/ cd /usr/local/src/nginx configure auto/configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf make -j4 make install
大体こんな感じで導入できます(細かい設定は各々やってください(nginxのコマンドを作ったり等))
設定ファイル
location {{ item.path }} { upload_pass @rails; proxy_connect_timeout 500; proxy_send_timeout 500; proxy_read_timeout 500; client_max_body_size 2G; upload_pass_form_field ".*"; upload_store /tmp/; upload_store_access user:rw group:rw all:rw; upload_resumable on; upload_set_form_field "$upload_field_name[filename]" "$upload_file_name"; upload_set_form_field "$upload_field_name[type]" "$upload_content_type"; upload_set_form_field "$upload_field_name[path]" "$upload_tmp_path"; upload_aggregate_form_field "$upload_field_name[md5]" "$upload_file_md5"; upload_aggregate_form_field "$upload_field_name[size]" "$upload_file_size"; upload_max_file_size 2G; }
導入時詰まったところ
アップロードモジュールのmasterは新しいnginxには対応してないみたいです。(全てのバージョンで確認はしていないので実際わかってないです。) 自分が入れたnginx/1.9.13では動かなかったです。しかしプルリクの2.2(アップロードモジュール)は動くみたいだったのでそれを使用すると上手く入れれました。
最後に
アップロードモジュールも結構古いので、将来的には動かなくなる可能性も高いので導入は自己責任でお願い致します。 個人的にはLuaとか使ってアップロードモジュールみたいなのを作るのが安定なのかなと思っています。(好みですが)
- 作者: 久保達彦,道井俊介
- 出版社/メーカー: 技術評論社
- 発売日: 2016/01/16
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (5件) を見る