変更されたファイルは表示されません(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
を主張しているのはなぜですか?
スクリプトは正しいディレクトリで実行されていますか? './。queue'を絶対パス名に変更してみてください。 – Barmar
'.queue'を含むディレクトリに切り替えるには、スクリプトの前に' cd'コマンドを入力してください。ところで、 '。/'は必要ありません。これはすべての相対パス名のデフォルトです。 – Barmar
今私は愚かだと感じる。 Supervisorにはすべてを修正する 'directory'設定があります。明らかにプログラムを再起動するだけでは不十分です。プログラムのconfファイルを変更するたびにスーパーバイザサービス全体を再起動する必要がありました。ありがとう! – Rudie