Скрипт 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")