2016-11-17 4 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は空ではないので、行を実行する必要があります。

スーパーバイザコンテキストには、何らかの種類のスーパー永続ファイルキャッシュがありますか。私は仕事とデーモンを再開しました。私はfree && sync && echo 3 > /proc/sys/vm/drop_caches && freeを実行しました(スーパーバイザコンテキスト内ではありません!)。私はtouch .queueです。何も動作しません。スーパーバイザのqueue.sh.queueを主張しているのはなぜですか?

+0

スクリプトは正しいディレクトリで実行されていますか? './。queue'を絶対パス名に変更してみてください。 – Barmar

+0

'.queue'を含むディレクトリに切り替えるには、スクリプトの前に' cd'コマンドを入力してください。ところで、 '。/'は必要ありません。これはすべての相対パス名のデフォルトです。 – Barmar

+0

今私は愚かだと感じる。 Supervisorにはすべてを修正する 'directory'設定があります。明らかにプログラムを再起動するだけでは不十分です。プログラムのconfファイルを変更するたびにスーパーバイザサービス全体を再起動する必要がありました。ありがとう! – Rudie

答えて

0

問題はディレクトリでした。スーパーバイザーはデフォルトで/で実行されますが、プログラムの実行ファイルがどこにあるのかはわかりません。スーパーバイザーにはdirectory configがあります。新しい設定ファイル:

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

そして、私はサービス(service supervisor restart)だけでなく、プログラム(supervisorctl restart xx)を再起動する必要がありました。

関連する問題