我在 Amazon ECS 上的 docker 上运行 PHP 后台脚本。我在cron.d中执行的文件如下所示:
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
#For Uploading Files
*/2 * * * * root /usr/local/bin/php /path/to/script.sh
# Mandatory blank line
然后在我的脚本中,我有这个:
#!/bin/bash
source $HOME/.profile
php dosomething.php
在我的 php 文件中,它很简单:
<?php
if(getenv('sometext')){
echo getenv('sometext');
} else {
echo 'ENV does not exist'
}
如果我登录到我的 docker 容器并从命令行运行脚本,它可以工作!但是如果我从中运行它,它会失败,因为永远不会读取 env 变量。我可能做错了什么?
shell 命令可以获取环境变量:
xargs -0 bash -c 'printf "export %qn" "$@"' -- < /proc/1/environ
将其添加到脚本文件(例如/data/env.sh(:
xargs -0 bash -c 'printf "export %qn" "$@"' -- < /proc/1/environ > /etc/environment
你的 cron.d 将看起来像:
echo "*/2 * * * * root /data/env.sh ; . /etc/environment;/usr/local/bin/php /path/to/script.sh"