使用crontab作业修改全局环境变量

时间:2014-12-24 09:06:11

标签: shell cron crontab

这个问题让我感到厌倦了一整天......

我想自动修改root的环境变量$ bai,然后编写一个shell脚本并将其添加到root的crontab中。但是$ bai没有改变。

这是我的脚本/root/111.sh:

#!/bin/bash
time=`date`
export bai=$time

这是crontab:

*/1 * * * *  . /root/111.sh

然后echo $bai为空

但是当我source /root/111.shecho $bai时,它可以获得时间:Wed Dec 24 17:02:48 CST 2014

那么如何在我的cron作业中使用它来获取环境变量呢?

3 个答案:

答案 0 :(得分:2)

您无法在不同的流程中更改变量。可能你离你最近的就是使用一个像这样的文件。

crontab

* * * * * /bin/date > /tmp/value.txt

在其他一些剧本中:

#!/bin/bash
while :; do 
   v=$(cat /tmp/value.txt)
   echo $v
   sleep 1
done   

答案 1 :(得分:1)

我想你要做的是修改导出的变量。但是,子进程无法修改父进程的环境。设置变量的唯一方法是从父。

答案 2 :(得分:1)

问题是因为你有两种不同的bash。 crontab发出命令并将变量$bai导出到刚刚打开的当前会话,然后退出,并使用初始化的$bai,这就是为什么当你通过发布{ {1}}您看到source /root/111.sh已创建,因为您正在bash会话中创建变量。

如果您希望每次打开bash会话时都拥有$bai变量,则需要通过添加

将其添加到主目录中的$bai文件中
.bashrc

如果您发出echo "export bai=\`date\`" >> ~/.bashrc ,每次启动bash时,您都会获得日期...但是如果您希望每{x}次更新echo $bai变量,那么此方法是不正确,因为它会在您登录时保留日期,而crontab因为我的第一个解释而无法帮助您。