2017-04-12 37 views
0

私は永遠にループするbashスクリプトを持っています。実行する必要があるかどうかを確認するために環境変数をチェックします。php yii process-queueこのスクリプトは、方法によってドッキングウィンドウコンテナ用のコマンドですので、PIDが1シェルスクリプトに環境変数の変更が表示されない

出力ps auxからです。私は、コマンドラインからexport RUNPROCQ=trueを実行すると、私はphp yii process-queueの実行を開始するためにループを期待

USER  PID %CPU %MEM VSZ RSS TTY  STAT START TIME COMMAND 
root   1 0.0 0.0 19720 3340 ?  Ss 09:26 0:00 /bin/bash /var/www/hub/process-queue-runner.sh 
root  293 0.0 0.0 19936 3664 ?  Ss 09:28 0:00 /bin/bash 
root  1927 0.0 0.0 6012 648 ?  S 09:42 0:00 sleep 0.5 
root  1928 0.0 0.0 36092 3164 ?  R+ 09:42 0:00 ps aux 

が、それはない - 私は自分のbashスクリプトで実行できるコマンドがあるので、RUNPROCQ環境変数値の変更を見ることができますか?

process-queue-runner.shと呼ばれる私のbashスクリプト:

#!/bin/bash 

while : 
do 
    if [[ ${RUNPROCQ} != "false" ]]; then 
     php yii process-queue 
    fi 
    sleep 0.5 
done 

ここでは、ドッキングウィンドウ-compose.ymlファイルから該当するセクションです:

procq: 
    image: hub_ui:latest 
    environment: 
    ENV: qa1 
    RUNPROCQ: "false" # this is to stop the proc q from running straight away - the refresh_db.sh script will set this to true once it has finished loading the fixtures 
    links: 
    - db:local.database.hub 
    - cache:local.cache.hub 
    command: /var/www/hub/process-queue-runner.sh 
+0

どのようにスクリプトを実行しましたか? – Inian

+0

@Inianドッカーコンテナのコマンドです - 関連するdocker-compose.ymlセクションを私の質問に追加しました。 –

+0

問題は、環境変数の変更を反映していない、サブシェルで実行されるスクリプトの_execution_です。多分あなたはそれをソースできると思いますか? – Inian

答えて

1

を監視することができます。たぶん、あなたはprocess-queue-runner.shにこのような何かを試してみてください:

#!/bin/bash 
while : 
do 
    source /tmp/.myvars 
    if [[ ${RUNPROCQ} != "false" ]]; then 
     php yii process-queue 
    fi 
    sleep 0.5 
done 

でrefresh_db.sh追加:

RUNPROCQ="true" 
#or 
RUNPROCQ="false" 
#... 
echo RUNPROCQ="$RUNPROCQ" > /tmp/.myvars 
+0

ありがとう!ソリューションは同じ方法で問題を解決しますが、私が行ったよりも洗練されています。ディスクを読み書きするための共通の場所として使用します。私は、コマンドを実行するかどうかを決定するために、隠しファイルの存在を使用しました。フィードバックを感謝します。 –

0

あなたのスクリプトで結構です。

$ export RUNPROCQ=true 
$ ./ba.sh 
php yii process-queue 
php yii process-queue 
php yii process-queue 
php yii process-queue 
^C 
$ cat ba.sh 
while : 
do 
    if [[ ${RUNPROCQ} != "false" ]]; then 
     echo php yii process-queue 
    fi 
    sleep 0.5 
done 
0

このスーパースクリプトを忘れてしまいます。 上司は、あなたが親シェルにRUNPROCQ変数を設定しているし、あなたのスクリプトがそれを読むことができなくなりますので、それはそのようなつもりな作業ではありませんすべてのログを取得し、プロセス

supervisord

関連する問題