だから、私はこれをやや単純なタスクにしようとしていますが、まだ成功していません。私はそれが今変わることを望んでいます。
/var/www/lager-scanner/filer/pluk_script.py
に新しいファイルがあるたびに/var/www/lager-scanner/filer/Nav/FromNav
を実行し、これをwww-data
ユーザーとして実行します。
それを行う方法を教えてくれる人がいますか?
/var/www
内のすべてのフォルダーは、www-data
ユーザーおよびグループが所有し、775
権限を持っています。
だまされていないが、 この質問 で受け入れられている答えでは、ファイルが任意のディレクトリに追加または作成されるたびにスクリプト(または任意のコマンド)を実行する方法が説明されています。あなたの場合、唯一必要なイベントトリガーは次のとおりです。
-e create
さらに、ファイルへのパスを引数として使用していないため、--format
セクションをスキップできます。
バックグラウンドで実行するスクリプトは次のとおりです。
#!/bin/bash
DIR="/var/www/lager-scanner/filer/Nav/FromNav"
inotifywait -m -r -e create "$DIR" | while read f
do
# you may want to release the monkey after the test :)
echo monkey
# <whatever_command_or_script_you_liketorun>
done
リンクされた質問で説明されているように:
-e create
ディレクトリ内に新しいファイルcreatedが表示されます。
オプション:
-m -r
コマンドを無期限に(「モニター」)実行し、ディレクトリ内で再帰的に実行することです。
this によると、pyinotify
を使用することは最適なオプションではありません。
あなたはそれが機能しないことを述べたコメントで、andターゲットフォルダがリモートであることを述べました。まったく同じではありませんが、問題は this に関連しているようです。
変更はカーネルには見えません。完全にリモートで発生します。
(テスト済み)回避策は、リモートフォルダーをローカルにマウントすることです。
これは、PyPIのinotifyページの例の一部を削除したものです。
( https://pypi.python.org/pypi/inotify )開始するには:
import inotify.adapters
import os
notifier = inotify.adapters.Inotify()
notifier.add_watch('/home/student')
for event in notifier.event_gen():
if event is not None:
# print event # uncomment to see all events generated
if 'IN_CREATE' in event[1]:
print "file '{0}' created in '{1}'".format(event[3], event[2])
os.system("your_python_script_here.py")
Inotifyオブジェクトを作成し、add_watch()メソッドを使用して監視するディレクトリを追加します。次に、event_gen()メソッドを使用してInotifyオブジェクトからイベントジェネレーターを作成します。最後に、そのジェネレーターを反復処理します
監視対象ディレクトリに影響するファイル操作により、1つ以上のイベントが生成されるようになりました。各イベントは、4つの値を持つタプルの形式を取ります。
最初のprintステートメントのコメントを外して上記の例を実行し、監視対象ディレクトリに「new」ファイルを作成すると、次の出力が得られます。
((...)、['IN_CREATE']、 '/ home/student'、 'new') file 'new'は '/home/student'[.____。に作成されました。 ]((...)、['IN_ISDIR'、 'IN_OPEN']、 '/ home/student'、 '') ((...)、['IN_ISDIR'、 'IN_CLOSE_NOWRITE'/home/student '、' ') ((...)、[' IN_OPEN ']、'/home/student '、' new ') ((...)、[' IN_ATTRIB ']、'/home/student '、' new ') ((...)、[' IN_CLOSE_WRITE ']、'/home/student '、' new ')
新しいファイルが作成されると「IN_CREATE」イベントが発生するため、ここで実行したいコードを追加します。