Linux 我的shell脚本看不到环境变量的更改
我有一个永远循环的bash脚本,它检查一个环境变量,看它是否应该运行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
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