Скрипт inotify запускается дважды?

Я использую inotify-tools (inotifywait) на CentOS 7 для выполнения php-скрипта при каждом создании файла.

Когда я запускаю следующий скрипт:

#!/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

Почему это так и как я могу это исправить?

1 ответ

Трубопровод разбивается на несколько процессов. Таким образом, у вас есть родительский скрипт, а также отдельная подоболочка, выполняющая 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")
Другие вопросы по тегам