小编Seb*_*rth的帖子

在 cronjob 中加载用户环境变量

如何在 cronjob 中加载用户环境变量?


我有一个 cronjob,它应该在我的 Ubuntu 机器上每分钟启动一个脚本:

* * * * * /home/user/myscript.sh;
Run Code Online (Sandbox Code Playgroud)

在此脚本中,我想使用 和 等环境变量$JAVA_HOME$M2_HOME自动启动构建过程。问题是这些变量是在.bashrcvia中设置的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)

ubuntu bash environment-variables cron

5
推荐指数
1
解决办法
2万
查看次数

标签 统计

bash ×1

cron ×1

environment-variables ×1

ubuntu ×1