我有一个crontab每小时运行一次。运行它的用户在.bash_profile中有环境变量,当用户从终端运行作业时,这些环境变量是有效的,然而,显然这些环境变量在crontab运行时不会被拾取。
我已经尝试在.profile和.bashrc中设置它们,但它们似乎仍然没有被拾取。有人知道我可以把crontab可以获取的环境变量放在哪里吗?
我有一个crontab每小时运行一次。运行它的用户在.bash_profile中有环境变量,当用户从终端运行作业时,这些环境变量是有效的,然而,显然这些环境变量在crontab运行时不会被拾取。
我已经尝试在.profile和.bashrc中设置它们,但它们似乎仍然没有被拾取。有人知道我可以把crontab可以获取的环境变量放在哪里吗?
当前回答
不幸的是,crontab的环境变量范围非常有限,因此每次运行corntab时都需要导出它们。
一个简单的方法是下面的例子,假设你的env变量在一个名为env的文件中,然后:
* * * * * ../env && /path/to_your/command
此部分. ./env将导出它们,然后在您的命令的相同范围内使用它们
其他回答
而不是
0 * * * * sh /my/script.sh
使用bash -l -c
0 * * * * bash -l -c 'sh /my/script.sh'
对我来说,我必须在NodeJS文件中指定路径。
// did not work!!!!!
require('dotenv').config()
而不是
// DID WORK!!
require('dotenv').config({ path: '/full/custom/path/to/your/.env' })
在crontab中设置的任何内容都可以在cronjob中使用,可以直接使用,也可以使用脚本中的变量。
在cronjob的定义中使用它们
你可以配置crontab,让它设置can cronjob使用的变量:
$ crontab -l
myvar="hi man"
* * * * * echo "$myvar. date is $(date)" >> /tmp/hello
现在/tmp/hello文件显示如下内容:
$ cat /tmp/hello
hi man. date is Thu May 12 12:10:01 CEST 2016
hi man. date is Thu May 12 12:11:01 CEST 2016
在cronjob运行的脚本中使用它们
您可以配置crontab,以便它设置脚本可以使用的变量:
$ crontab -l
myvar="hi man"
* * * * * /bin/bash /tmp/myscript.sh
然后输入script /tmp/myscript.sh如下所示:
echo "Now is $(date). myvar=$myvar" >> /tmp/myoutput.res
它生成一个文件/tmp/myoutput。res展示:
$ cat /tmp/myoutput.res
Now is Thu May 12 12:07:01 CEST 2016. myvar=hi man
Now is Thu May 12 12:08:01 CEST 2016. myvar=hi man
...
你也可以在命令前加上env注入环境变量,如下所示:
0 * * * * env VARIABLE=VALUE /usr/bin/mycommand
在/etc/environment中设置变量在Ubuntu中也适用。从12.04开始,/etc/environment中的变量将为cron加载。