質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.30%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1391閲覧

マウントしたNASのディレクトリの変化をキャッチしたい

退会済みユーザー

退会済みユーザー

総合スコア0

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/10/08 09:10

実現したいこと

NASのあるディレクトリにファイルが追加された場合に、それをマウントしているコンピュータ(linux mint 21)でそのイベントをキャッチしたいと思っています。

pythonのwatchdogとシェルのinotifywaitを試してみたのですがうまくいきません。

発生している問題・エラーメッセージ

linux mint 21にNASのあるディレクトリをマウントしています。

マウントサイトが「/mnt/nas/share」とすると、そのディレクトリにコンピュータ側から何らかの修正・ファイル追加をおこなうとpythonのwatchdogでもinotifywaitでもイベントをキャッチできるのですが、NASのディレクトリにNAS上でファイルを追加した場合には「/mnt/nas/share」の中身が変更されたにもかかわらず、そのイベントをコンピュータ側からはキャッチできません。

該当のソースコード

python

1from watchdog.events import FileSystemEventHandler 2from watchdog.observers import Observer 3import time 4 5class ChangeHandler(FileSystemEventHandler): 6 def on_any_event(self, event): 7 print('[全て]',event) 8 9 def on_created(self, event): 10 print('[作成]',event) 11 12 def on_modified(self, event): 13 print('[変更]', event) 14 15 def on_moved(self, event): 16 print('[移動]',event) 17 18observer = Observer() 19observer.schedule(ChangeHandler(), '/mnt/nas/share', recursive=True) 20observer.start() 21 22while True: 23 time.sleep(5)

shell

1inotifywait -e create,delete,modify,move -mr /mnt/nas/share

補足情報

watchdogやinotifywaitで不可能であれば、他にいい方法はないでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

自己解決しました。

synology の NAS を nfs で linux mint 21 にマウントしていたのですが、そもそも nfs でマウントした「/mnt/nas/share」に対しては inotify も watchdog も機能しないようです。

そこでローカルの site-packages 内にある watchdog を NAS の site-packages にコピーして NAS 上で python を動かしたところ期待通りに動いてくれました。

これでなんとかなるように思います。

投稿2022/10/08 15:57

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2022/10/08 16:16

bdsfanさん、ありがとうございます。 あなたの提示されたスクリプトで完璧に作動しました。 私もいろいろ検索して「PollingObserver」という言葉までは辿り着いたのですが、提示されたスクリプトに到達できませんでした。 NAS上でいろいろ操作するよりも「PollingObserver」の方が遥かにいいですね。
otn

2022/10/08 18:36 編集

> NAS上でいろいろ操作するよりも「PollingObserver」の方が遥かにいいですね。 Poll(一定時間ごとにチェック)というのは、他の手段があるなら避けた方が良いと思いますので、NAS上で検知して通知するというのが可能ならそっちの方が良いと思います。NAS上で動かすことでのデメリットがあるならしょうが無いですが。
退会済みユーザー

退会済みユーザー

2022/10/08 21:58

otnさん、ありがとうございます。 linux mint の PollingObserver よりNAS上の watchdog の方が優れているということでしょうか? その理由が私には理解できないので、できればその理由を教えて下さい。
bsdfan

2022/10/10 14:55

polling は、変化がないかを定期的にチェックしに行く方法なので、inotifyや元のwatchdogを使う方法に比べてシステムに余計な負荷がかかることになります。また、定期的にチェックしにいくという仕組み上、いくらかの遅延が発生することになります。 そういう点で、「NAS上で検知して通知するというのが可能ならそっちの方が良い」ということになります。 負荷とか、遅延とか、システムの構成の簡易さとか、いろいろな面で自分が良いと判断する方法をとればいいです。
退会済みユーザー

退会済みユーザー

2022/10/10 15:11

bsdfan さん、ありがとうございます。 実は、NAS に python の watchdog を設定して、イベントを検知したら必要なファイルを linux mint に ftp でアップロードするプログラムを作成しました。NAS では paramiko の設定ができなかったので ftp にしました。 さらに linux mint でも watchdog を設定して、送られたファイルを別の形式に変換して、別の NAS に scp でアップロードするプログラムも作成しました。 watchdog が効かなかった場合を想定して手動でも動くようにしました。 ほとんど1日かかりましたが、お陰様でほぼ思い通りのことができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問