2017-04-12 140 views
0

我有一個bash腳本,它永遠循環着,它內部檢查一個環境變量,看看它是否應該運行php yii process-queue。這個腳本是由方式泊塢窗容器中的指令,所以在PID 1我的shell腳本沒有看到環境變量的變化

輸出ps aux

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 

當我在命令行中運行export RUNPROCQ=true我預想的循環開始運行php yii process-queue但它不 - 有一個命令,我可以在我的bash腳本中運行,因此它可以看到RUNPROCQ環境變量值更改?

我的bash腳本稱爲process-queue-runner.sh

#!/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

問題出在運行在子shell中的腳本的_execution_,而不是反映您在環境變量中的更改。也許認爲你可以來源? – Inian

回答

1

這不像是要去工作,因爲你設置的父外殼RUNPROCQ變量,你的腳本將無法讀取它。也許你應該嘗試這樣的事情在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

用戶supervisord並忘記了這個手冊腳本。 主管可以抓取所有日誌和監控流程

supervisord