Linux 我的shell脚本看不到环境变量的更改

Linux 我的shell脚本看不到环境变量的更改,linux,shell,environment-variables,Linux,Shell,Environment Variables,我有一个永远循环的bash脚本,它检查一个环境变量,看它是否应该运行phpyii进程队列。顺便说一下,这个脚本是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/p

我有一个永远循环的bash脚本,它检查一个环境变量,看它是否应该运行
phpyii进程队列
。顺便说一下,这个脚本是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脚本中运行命令,以便它可以看到
RUNPROCQ
环境变量值的更改

我的bash脚本名为
process queue runner.sh

#!/bin/bash

while :
do
    if [[ ${RUNPROCQ} != "false" ]]; then
        php yii process-queue
    fi
    sleep 0.5
done
以下是docker-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
你的剧本很好

$ 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

用户管理并忘记此手册脚本。 主管可以抓取所有日志并监控流程


它不会那样工作,因为您正在父shell中设置RUNPROCQ变量,而您的脚本将无法读取它。也许您应该在process-queue-runner.sh中尝试以下操作:

在refresh_db.sh中添加:


您是如何执行该脚本的?@Inian这是docker容器的命令-我已在问题中添加了相关的docker-compose.yml部分。问题在于在子shell中运行的脚本的执行,没有反映您对环境变量的更改。也许你能找到它的来源?我设法让它像这样运行:
root 1 0.0 0.0 19720 3272?Ss 10:12 0:00/bin/bash-c source/var/www/hub/process queue runner.sh
但是更改env变量值仍然没有任何作用……我最终只是创建和删除了一个隐藏文件,并测试该文件是否存在。虽然不理想,但它的磁盘i/o开销很小。谢谢!You's的解决方案比我的解决方案更优雅,尽管它以同样的方式解决了问题——将磁盘用作读取/写入内容的常用位置。我只是使用隐藏文件的存在来确定是否运行该命令。感谢您的反馈。
#!/bin/bash
while :
do
    source /tmp/.myvars
    if [[ ${RUNPROCQ} != "false" ]]; then
        php yii process-queue
    fi
    sleep 0.5
done
RUNPROCQ="true"
#or
RUNPROCQ="false"
#...
echo RUNPROCQ="$RUNPROCQ" > /tmp/.myvars