我的shell脚本没有看到环境变量的变化

时间:2017-04-12 09:43:29

标签: linux shell environment-variables

我有一个bash脚本,它永远循环,在里面它检查一个环境变量,看它是否应该运行php yii process-queue。顺便说一下,这个脚本是docker容器的命令,PID 1也是如此。

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脚本中运行,所以它可以看到{ {1}}环境变量值的变化?

我的bash脚本名为RUNPROCQ

process-queue-runner.sh

以下是docker-compose.yml文件中的相关部分:

#!/bin/bash

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

3 个答案:

答案 0 :(得分:1)

它不会像那样工作,因为你在父shell中设置RUNPROCQ变量,你的脚本将无法读取它。也许你应该在 process-queue-runner.sh 中尝试这样的事情:

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

refresh_db.sh 中添加:

%include "std_string.i" 
%include "std_string_ref.i" 

%feature("director") DirectorClass; 
%include "DirectorClass.h"

答案 1 :(得分: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

答案 2 :(得分:0)

用户supervisord并忘记这个手册脚本。 主管可以获取所有日志并监控流程

supervisord