我有一個主管「程序」(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
將長時間忙碌。當它不忙時,它每2秒檢查一次.queue
的內容。
我的隊列文件目前有3行。當我手動運行queue.sh
時,我可以看到它工作:找到第1行,將其切斷,並運行download.php
。主管不!即使在重新啓動作業和整個守護進程之後,它仍然每隔2秒說一次Queue empty
。在改變信息並重新開始工作之後,它現在每2秒就說一次Queue empty II
。但.queue
不是空的,所以它應該運行線路。
在supervisor上下文中是否存在某種超級持久文件緩存?我已經重啓了這個工作和守護進程。我運行了free && sync && echo 3 > /proc/sys/vm/drop_caches && free
(不在主管環境中!)。我有touch .queue
。什麼都沒有爲什麼主管的queue.sh
堅持.queue
是空的?
你確定腳本運行在正確的目錄嗎?嘗試將'./。queue'改爲絕對路徑名。 – Barmar
或者在腳本的前面放一個'cd'命令來切換到包含'.queue'的目錄。順便說一句,不需要'./',這是所有相對路徑名的默認值。 – Barmar
現在我感到很蠢。主管有一個「目錄」配置可以修復所有的問題。顯然重新啓動程序是不夠的。每次更改程序conf文件後,我都必須重新啓動整個supervisor服務。謝謝! – Rudie