1

CentOS 7 でinotify-tools ( )を使用して、ファイル作成のたびに php スクリプトを実行しています。inotifywait

次のスクリプトを実行すると:

#!/bin/sh
MONITORDIR="/path/to/some/dir"
inotifywait -m -r -e create --format '%w%f' "${MONITORDIR}" | while read NEWFILE
do
    php /path/to/myscript.php ${NEWFILE}
done

2 つのプロセスがあることがわかります。

# ps -x | grep mybash.sh
    27723 pts/4    S+     0:00 /bin/sh /path/to/mybash.sh
    27725 pts/4    S+     0:00 /bin/sh /path/to/mybash.sh
    28031 pts/3    S+     0:00 grep --color=auto mybash.sh

それはなぜですか、どうすれば修正できますか?

4

1 に答える 1

0

パイプラインは複数のプロセスに分割されます。while readしたがって、親スクリプトに加えて、ループを実行する別のサブシェルがあります。

それを望まない場合は、代わりに bash または ksh で利用可能なプロセス置換構文を使用してください (以下のシバンはもはや ではないことに注意してください#!/bin/sh)。

#!/bin/bash
monitordir=/path/to/some/dir

while read -r newfile; do
    php /path/to/myscript.php "$newfile"
done < <(inotifywait -m -r -e create --format '%w%f' "$monitordir")
于 2017-05-03T01:21:50.127 に答える