2013-06-24 8 views
0

나는 (inotifywait으로) 폴더를보고 프로세스를 실행한다 (다른 여러 서버에 정보를 보내고 데이터베이스를 업데이트하는 PHP 스크립트를 만들었지 만 그럴 생각은 없다고 생각합니다.) 관련성있는) 새로운 파일이 생성 될 때.자동으로 백그라운드 쉘 스크립트 종료

제 문제는 스크립트가 실제로 종료 된 후 왜 (PHP 실행을 위해 버퍼를 채우지 않는 파일로 출력을 리디렉션했는지) 이해가 안된다는 것입니다.

저는 우분투 12.04 서버와 최신 버전의 PHP를 사용하고 있습니다.

여기 내 스크립트입니다 : 시간, 시간이 나는 마침내 해결책을 발견 한 후

#!/bin/sh 

#get the script directory 
SCRIPT=$(readlink -f "$0") 
script_path=$(dirname "$SCRIPT") 

for f in `ls "$script_path"/data/` 
do 
    php myscript.php "$script_path"/data/$f & 
done 
#watch the directory for file creation 
inotifywait -q -m --format %w%f -e create "$script_path"/data/ | while read -r line; do 
    php myscript.php "$line" & 
done 
+0

은 inotifywait이 종료되어 가장 가능성이 높음 – DevZer0

+0

스크립트를 어떻게 실행하는지 설명해 주시겠습니까? 그것은 cron 직업인가? 세션이 끊어 지거나 사용자가 로그 아웃 한 경우에도 screen/nohup 또는 다른 방법을 사용하여 명령을 실행합니까? – hostmaster

+0

나는 악마를 만들 계획을 가지고 있지만, 잠시 동안 나는 터미널에 의해 실행한다 : './myscript.sh &'. cron 작업이 백그라운드 프로세스를 실행할 수 없다는 것을 알고 있습니다. (이미 시도한 것처럼 ...) – user2515367

답변

0

이 좋아, 그것은 조금 더러울 수 (해야한다) 수도 있지만 그것은 작동!

#!/bin/sh 

#get the script directory 
SCRIPT=$(readlink -f "$0") 
script_path=$(dirname "$SCRIPT") 

#trap SIGHUP SIGINT SIGTERM and relaunch the script 
trap "pkill -9 inotifywait;($SCRIPT &);exit" 1 2 15 

for f in `ls "$script_path"/data/` 
do 
    php myscript.php "$script_path"/data/$f & 
done 
#watch the directory for file creation 
inotifywait -q -m --format %w%f -e create "$script_path"/data/ | while read -r line; do 
    php myscript.php "$line" & 
done 

이 나를 :)

편집으로 쉘 초보자 도움이되기를 바랍니다 : 내가 이전 명령에서 말했듯이, 난 여기 내 마지막 스크립트, 트랩 명령을 사용하여 "pkill에 -9 inotifywait를"추가 inotify 프로세스가 겹쳐지지 않도록하려면 괄호를 사용하여 새 프로세스가 현재 프로세스의 하위 프로세스가 아닌지 확인한 다음 종료하여 현재 프로세스의 실행을 중지하십시오.

0

nohupscreen 이것은 정확히 당신이 찾고있는 것입니다

+0

심지어 nohup을 사용하는 경우에도 스크립트는 때때로 가끔씩 작동을 멈추고, 실행 상태를 유지하는 유일한 방법은 백그라운드에서 실행하는 것입니다. – user2515367

관련 문제