Docker PHP cron 使用 ENV 变量



我在 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" 

最新更新