- - PR -
ファイルを消すスクリプト
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-11-14 14:57
いつもお世話になっております
掲題の件についてお尋ねさせていただきます。 ある特定のファイルが作成されたら、即削除するようなスクリプトを作りたいのですが、なにかよい方法はありますでしょうか。 方法や手順は問いませんので、ご教授のほど宜しくお願いいたします。 ■やりたいこと /home/(hoge)/Maildir/courierpop3dsize のcourierpop3dsizeが作成されたら即時に削除したい。(hoge)は、一意で各ユーザーのMaildir以下に生成されます。 ■背景 OutLookで、「サーバーに残す」の設定している場合、当該ファイルが悪さをしてたまに同じメールが2個届いてしまいます。 ■構成 ・RedHatES4(Update5) awkがいいのか、shellがいいのか、perlがいいのか、いろいろ悩んでましたがラチがあかないのでご意見をお聞かせください。宜しくお願いします。 | ||||||||
|
投稿日時: 2007-11-14 15:23
こんなスクリプトをcronで定期実行する。
こっちの方が処理がやや早いかも。
| ||||||||
|
投稿日時: 2007-11-14 15:45
温州蜜柑さん、返信ありがとうございます。
スクリプトまで丁寧に記述いただき、ありがとうございます。 cronによる自動実行でのやり方でも問題ないかと思いますが、もし可能でしたらディレクトリを常時監視していてファイルが作成されると即時削除させたいと考えています。 いただいたシェルを常駐させたりするのは可能でしょうか? [ メッセージ編集済み 編集者: ドラミ 編集日時 2007-11-14 15:48 ] | ||||||||
|
投稿日時: 2007-11-14 16:00
プログラムを組んでも良いのなら、fcntl(2) の F_NOTIFY の DN_CREATE を登録しておいて、通知が来たら stat(2) して存在してたら削除すればよいんじゃないでしょうか。
| ||||||||
|
投稿日時: 2007-11-14 16:04
こんにちは。
exitしないで無限ループにしてしまえば常駐しますけど それに付随して発生するCPU負荷やメモリ消費 ディスクIO負荷なんかも考慮しないといけないかもしれませんね。 #たぶんたいしたことないと思いますが。 試せばいいんじゃないですかネ。 | ||||||||
|
投稿日時: 2007-11-14 22:04
素人ながら書いてみます。
ファイルの作成を許したくないのか、 ファイルを置きたいけど、容量を増やしたくないのか どちらでしょうか? 許したくない場合は、パーミッションの設定をすべきだと思います。 あらかじめファイル名が決まっているのならば、 /dev/nullへのシンボリックをおいて、書き込むデータを全てnullに捨てる方法もあるかと思います。 ln -s /dev/null /home/(hoge)/Maildir/courierpop3dsize | ||||||||
|
投稿日時: 2007-11-15 11:35
皆様、返信ありがとうございます!
> スフレさん プログラムを書いたことがない私では理解不能でした。すみません。 しかしfcntl(2)でのやり方は非常に興味のある内容なので、時間のあるときにでもため してみます。 > みなとさん はい、試してみました。 温州蜜柑さんに教えていただいた次のコードを少し修正して、1分毎に実行するようループさせてみました。 コード: -------------------------------------------------------------------------------- #!/bin/sh ls /home | { while : read _dir do rm -f /home/$_dir/Maildir/courierpop3dsize sleep 60 done } exit -------------------------------------------------------------------------------- この時に問題になるのが、/home/(hoge)/部分が4000ディレクトリあり、スクリプトが1分で終了しないことがわかりました。(平均2.5分かかってしまいました) しかたのないことかもしれませんが、1分以上経過してしまうと、メールのヘビーユーザーがメールを多重受信してしまう恐れがあり、もう少し軽くできないものかと考えています。 > かなものさん ファイルの作成は許したくないです。 ということで、パーミッションの設定をしてみました。 chown root.root /home/(hoge)/Maildir/courierpop3dsize とやりましたが、メールを受信すると勝手に所有者が本人に替わってしまいます。 おそらくPOPサーバがroot権限で書き換えてしまっていると考えられます。 ln -s /dev/null /home/(hoge)/Maildir/courierpop3dsize →こちらについても試してみましたが、メールを受信するとシンボリックが削除さ れて、元のファイルに書き換えられてしまいます。 しばらくは上記コードを3分間隔で実行させていただき、また状況を報告させてい ただきます。 いろいろとありがとうございます。 | ||||||||
|
投稿日時: 2007-11-15 14:18
rm -f /home/*/Maildir/courierpop3dsize
って、できませんでしたっけ? あと、軽くとおっしゃってますが、処理を早くするのであれば、処理を分散してみては? rm -f /home/[a-z]*/Maildir/courierpop3dsize& rm -f /home/[A-Z]*/Maildir/courierpop3dsize& rm -f /home/[0-9]*/Maildir/courierpop3dsize& (注意:未検証) (問題:このまま実装すると、非同期プロセス(子プロセス)になってしまうので、1分間起動で非同期プロセスが完了せずに、次のプロセスが走ってしまいますが...) |