如何在 cronjob 中加载用户环境变量?
我有一个 cronjob,它应该在我的 Ubuntu 机器上每分钟启动一个脚本:
* * * * * /home/user/myscript.sh;
Run Code Online (Sandbox Code Playgroud)
在此脚本中,我想使用 和 等环境变量$JAVA_HOME
来$M2_HOME
自动启动构建过程。问题是这些变量是在.bashrc
via中设置的export JAVA_HOME=/../..
。
source
因此,在执行我的脚本之前我需要这些文件:
* * * * * source ~/.bash_profile; source ~/.bashrc; /home/user/myscript.sh;
Run Code Online (Sandbox Code Playgroud)
但是,变量尚未设置!为了测试这一点,我将echo
环境变量添加env
到日志文件中:
env >> ~/env.log
echo $M2_HOME >> ~/env.log
Run Code Online (Sandbox Code Playgroud)
日志文件仍然不包含变量。仅将以下内容附加到文件中(无$M2_HOME
等):
LANGUAGE=en_US:en
HOME=/home/user
LOGNAME=user
PATH=/usr/bin:/bin
LANG=en_US.UTF-8
SHELL=/bin/sh
PWD=/home/user
Run Code Online (Sandbox Code Playgroud)
如果我在 shell 中运行脚本,所有变量都会打印到env.log
.
source
当我将命令放入脚本文件中时,也会发生同样的情况。仅当我export
在变量声明之前删除关键字时,命令才可以看到该关键字echo $var
。但这不是解决方案,因为我不管理这些声明。
我尝试了@tripplee的解决方案与有限的sh shell问题,但它仍然不起作用。我进一步将其简化为一个非常简单的 cronjob,无需第二个脚本来显示问题:
* * * * * . …
Run Code Online (Sandbox Code Playgroud)