为什么在我的 /etc/environment 中设置的变量会出现在我的 cron 环境中?

为什么在我的 /etc/environment 中设置的变量会出现在我的 cron 环境中?

长期以来,我一直习惯于认为,我在 cron 中想要的任何环境,基本上都需要在 crontab 本身中设置——请参阅此处的“不同的环境”,可能是最佳答案: crontab 不起作用的原因

但是...在我最近安装的 Ubuntu 14.04 上,我有一个如下所示的 crontab:

*/1 * * * * env > /tmp/cron.env

如下所示的 /etc/environment 文件:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
RACK_ENV=production
LC_ALL=en_US.UTF-8
FROM_ETC_ENVIRONMENT=testing

输出的 cron.env 文件如下所示:

FROM_ETC_ENVIRONMENT=testing
HOME=/home/devops
LOGNAME=devops
RACK_ENV=production
PATH=/usr/bin:/bin
LANG=en_US.UTF-8
SHELL=/bin/sh
LC_ALL=en_US.UTF-8
PWD=/home/devops

FROM_ETC_ENVIRONMENT 是我用这个唯一名称创建的变量,以确保它不可能来自其他任何地方。

我查看了有关何时可能发生更改等的文档......我想我的问题实际上是这样的:

从 Ubuntu 14.04 开始,我可以依赖这种行为吗?(有人知道它是什么时候推出的吗?或者它一直都是这样,只是我没有意识到——crontab 不起作用的原因链接说 cron 根本不从 /etc/environment 读取,但根据我的测试,这似乎是错误的。

答案1

这个答案已经过时了(至少那部分是,来自2011)如果您检查/etc/pam.d/cron

$ grep pam_env /etc/pam.d/cron
# Read environment variables from pam_env's default files, /etc/environment
# and /etc/security/pam_env.conf.
session       required   pam_env.so
session       required   pam_env.so envfile=/etc/default/locale

pam_env是加载的 PAM 模块/etc/environment,如您所见,cron至少从 14.04 开始,它被 所使用。我检查了 12.04 系统,它也已pam_env加载cron

相关内容