2016-11-17 32 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將長時間忙碌。當它不忙時,它每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是空的?

+0

你確定腳本運行在正確的目錄嗎?嘗試將'./。queue'改爲絕對路徑名。 – Barmar

+0

或者在腳本的前面放一個'cd'命令來切換到包含'.queue'的目錄。順便說一句,不需要'./',這是所有相對路徑名的默認值。 – Barmar

+0

現在我感到很蠢。主管有一個「目錄」配置可以修復所有的問題。顯然重新啓動程序是不夠的。每次更改程序conf文件後,我都必須重新啓動整個supervisor服務。謝謝! – Rudie

回答

0

問題是目錄。 Supervisor在默認情況下運行於/,而不是程序可執行文件所在的位置。主管有一個directory config固定它。新的配置文件:

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

我不得不重新啓動服務(service supervisor restart),而不僅僅是程序(supervisorctl restart xx)。

相關問題