2016-11-17 2 views
-1

변경된 파일을 참조하지 않습니다 (queue.sh) 텍스트 파일이 비어 있지 않은 텍스트 파일에서 읽고 다른 프로그램을 실행하는 bash는 스크립트를 실행하는 경우 :관리자 또는 고양이 또는 bash는 내가 감독관 '프로그램'이

while true; do 

     # Read line 1 
     line=$(head -n1 ./.queue) 
     echo $line 

     if [ "$line" != "" ]; then 
       # Remove line 1 
       sed -i '1d' ./.queue 

       # Call the download script 
       /usr/bin/env php download.php $line 
     else 
       echo "Queue empty" 
     fi 

     sleep 2 

done 

download.php에 몇 분이 소요되고 다음 줄이 실행됩니다. .queue에 20 개의 회선이 포함되어있는 경우 queue.sh은 오랜 시간 바쁠 것입니다. 통화 중일 때마다 .queue에 콘텐츠를 2 초마다 확인합니다.

내 대기열 파일에 현재 3 줄이 있습니다. queue.sh을 수동으로 실행하면 작동하는 것을 볼 수 있습니다. 줄 1을 찾고 잘라내어 download.php을 실행합니다. 관리자는 그렇지 않습니다! 작업과 전체 데몬을 다시 시작한 후에도 단지 2 초마다 Queue empty을 계속 말합니다. 메시지를 변경하고 작업을 다시 시작하면 이제는 2 초마다 Queue empty II을 계속 말합니다. 그러나 .queue은 비어 있지 않으므로 줄을 실행해야합니다.

수퍼바이저 컨텍스트에 일종의 슈퍼 퍼시 스턴트 파일 캐시가 있습니까? 작업과 데몬을 다시 시작했습니다. free && sync && echo 3 > /proc/sys/vm/drop_caches && free을 실행했습니다 (수퍼바이저 컨텍스트가 아님). 나는 touch .queue입니다. 아무것도 작동하지 않습니다. 왜 감독관의 queue.sh.queue이 비어 있습니까?

+0

스크립트가 올바른 디렉토리에서 실행되고 있습니까? './.queue'를 절대 경로 이름으로 변경해보십시오. – Barmar

+0

또는'.queue '를 포함하는 디렉토리로 전환하기 위해 스크립트에서 이전에'cd' 명령을 넣으십시오. BTW,'. /'은 필요 없습니다. 이것은 모든 상대 경로 이름의 기본값입니다. – Barmar

+0

이제 나는 어리 석다. Supervisor는 모든 것을 수정하는'directory' 설정을 가지고 있습니다. 그리고 프로그램을 재시작하는 것만으로는 충분하지 않습니다. 프로그램 conf 파일을 변경할 때마다 전체 수퍼바이저 서비스를 다시 시작해야했습니다. 감사! – Rudie

답변

0

문제는 디렉토리입니다. Supervisor는 기본적으로 프로그램 실행 파일이있는 곳이 아닌 /에서 실행됩니다. 관리자는 directory config을 수정했습니다. 새로운 설정 파일 :

[program:xx] 
command=/bin/bash queue.sh 
directory=/my/path/xx 

그리고 서비스 (service supervisor restart)뿐만 아니라 프로그램 (supervisorctl restart xx)를 다시 시작했다.