변경된 파일을 참조하지 않습니다 (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
이 비어 있습니까?
스크립트가 올바른 디렉토리에서 실행되고 있습니까? './.queue'를 절대 경로 이름으로 변경해보십시오. – Barmar
또는'.queue '를 포함하는 디렉토리로 전환하기 위해 스크립트에서 이전에'cd' 명령을 넣으십시오. BTW,'. /'은 필요 없습니다. 이것은 모든 상대 경로 이름의 기본값입니다. – Barmar
이제 나는 어리 석다. Supervisor는 모든 것을 수정하는'directory' 설정을 가지고 있습니다. 그리고 프로그램을 재시작하는 것만으로는 충분하지 않습니다. 프로그램 conf 파일을 변경할 때마다 전체 수퍼바이저 서비스를 다시 시작해야했습니다. 감사! – Rudie