2016-12-08 4 views
0

CentOS 7에서 (inotifywait)을 사용하여 모든 파일 생성시 PHP 스크립트를 실행합니다.inotify 스크립트가 두 번 실행됩니까?

나는 다음과 같은 스크립트를 실행하면 :

# 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 

왜이다, 내가 그것을 어떻게 해결할 수 : 내가 거기에이 개 프로세스가 볼 수

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

를?

+0

- 모든 대문자 변수 이름은 쉘이나 운영 체제에 의미가있는 변수에 사용되는 POSIX에 의해 지정되는 반면, 하나 이상의 소문자가있는 이름은 응용 프로그램 용으로 예약됩니다. http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html을 참조하십시오. –

답변

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")