web-dev-qa-db-ja.com

別のユーザーがディレクトリを変更したときにスクリプトを実行する方法は?

これに似たトピックについて少し議論されていることは知っています。しかし、ここに私が基本的にやろうとしていることがあります。

watchedという監視ディレクトリがあり、そのディレクトリにファイルが追加されるたびに、syncbh.shというスクリプトをトリガーして、そのディレクトリからファイルを取り出してリモートサーバーにアップロードします。

警告は、あるユーザー(user2)がwatchedディレクトリにファイルを作成しますが、スクリプトは別のユーザー(user1)が実行するということです。

私はincronを使用してこれを達成しようとしましたが、スクリプトはroot権限でuser1によって手動で実行できますが、incronデーモンは決して実際には、他のuser2によるファイル作成イベントによって自動的にトリガーされます。

inoticomingがより良い代替手段になるかどうかを考えましたが、この構文がどのように機能するかについてはわかりません。これを達成するためのより良い方法がある場合、またはinoticomingを使用することになった場合、コマンド構文は/home/user1/watchedディレクトリを監視し、スクリプト/usr/local/bin/syncbh.sh ifを実行するように要求しますそのディレクトリ内でファイルが作成/変更されますか?

どんな助けでも大歓迎です。

13
user280327

inoticomingを使用:

ブート時にinoticomingを実行するスクリプトを/etc/init.d/に配置できます。

  1. inoticomingフォルダーのpidログ/最後のwatchedを保持する新しいフォルダーを作成します:Sudo mkdir -p /var/log/inoticoming/watched/

  2. inoticoming_watchedにスクリプト/etc/init.d/を作成します。

*忘れずに<path_to_folder>と<path_to_script>を変更して、watchedフォルダーのフルパスと実行するスクリプトのフルパスを一致させてください。

#!/bin/sh

case "${1}" in
    start)
        inoticoming --logfile '/var/log/inoticoming/watched/inoticoming.log' --pid-file '/var/log/inoticoming/watched/inoticoming_last_pid.txt' <path_to_folder> <path_to_script> \;
    ;;

    stop)
        kill -15 $(< /var/log/inoticoming/watched/inoticoming_last_pid.txt tee)
    ;;

    restart)
        ${0} stop
        sleep 1
        ${0} start
    ;;

    *)
    echo "Usage: ${0} {start|stop|restart}"
    exit 1
    ;;
esac
  1. スクリプトを実行可能としてマークします:Sudo chmod u+x /etc/init.d/inoticoming_watched

  2. inoticoming_watchedによって呼び出されるスクリプトが実行可能であることを確認してください。

  3. rc.dを更新して、サービスinoticoming_watchedを起動時に開始します:Sudo update-rc.d inoticoming_watched defaults

inoticomingログイン/var/log/inoticoming/watchedを確認できます。

5
kos

まず、インストールinoticoming

Sudo apt-get install inoticoming

次に、このコマンドを使用します。

複数回開始できるため、進行中の進行中のプロセスに注意してください。

$ inoticoming /home/user1/watched /usr/local/bin/syncbh.sh /home/user1/watched/{} \;
              ^                   ^                        ^
              |                   |                        |
              ^-- The directory to be monitored            |
                                  |                        |
                                  ^-- Your script          |
                                                           ^-- The parameter for your script
  • プロセスはバックグラウンドで実行され、/home/user1/watchedを監視しています

  • そのディレクトリでファイルが追加または変更されると、スクリプト/usr/local/bin/syncbh.shが呼び出されます。

    • このスクリプトのパラメーターは、この場合/home/user1/watched/<name_of_changed_or_modified_file>です

    • {}はファイル名に置き換えられます

4
A.B.