我有一个crontab每小时运行一次。运行它的用户在.bash_profile中有环境变量,当用户从终端运行作业时,这些环境变量是有效的,然而,显然这些环境变量在crontab运行时不会被拾取。
我已经尝试在.profile和.bashrc中设置它们,但它们似乎仍然没有被拾取。有人知道我可以把crontab可以获取的环境变量放在哪里吗?
我有一个crontab每小时运行一次。运行它的用户在.bash_profile中有环境变量,当用户从终端运行作业时,这些环境变量是有效的,然而,显然这些环境变量在crontab运行时不会被拾取。
我已经尝试在.profile和.bashrc中设置它们,但它们似乎仍然没有被拾取。有人知道我可以把crontab可以获取的环境变量放在哪里吗?
当前回答
以上所有解决方案都很有效。
当环境变量中有任何特殊字符时,就会产生问题。
我找到了解决方案:
eval $ (printenv | awk - f = '{打印“出口”“\”“1美元 "\"""=""\""$ 2 "\"" }' >> / 等/配置文件)
其他回答
从命令行运行crontab -e时,可以在crontab本身中定义环境变量。
LANG=nb_NO.UTF-8
LC_ALL=nb_NO.UTF-8
# m h dom mon dow command
* * * * * sleep 5s && echo "yo"
此特性仅适用于特定的cron实现。Ubuntu和Debian目前使用vixie-cron,它允许在crontab文件中声明这些(也可以是GNU mcron)。
Archlinux和RedHat使用cronie,它不允许声明环境变量,并且会在cron.log中抛出语法错误。每个条目都可以采取变通措施:
# m h dom mon dow command
* * * * * export LC_ALL=nb_NO.UTF-8; sleep 5s && echo "yo"
对我来说,我必须在NodeJS文件中指定路径。
// did not work!!!!!
require('dotenv').config()
而不是
// DID WORK!!
require('dotenv').config({ path: '/full/custom/path/to/your/.env' })
展开@Robert Brisita刚刚展开,如果你不想在脚本中设置配置文件的所有变量,你可以在脚本顶部选择要导出的变量
在crontab -e文件中:
SHELL=/bin/bash
*/1 * * * * /Path/to/script/script.sh
在script.sh
#!/bin/bash
export JAVA_HOME=/path/to/jdk
some-other-command
对于我来说,我必须为php应用程序设置环境变量。我通过向crontab添加以下代码来解决这个问题。
$ sudo crontab -e
定时任务:
ENVIRONMENT_VAR=production
* * * * * /home/deploy/my_app/cron/cron.doSomethingWonderful.php
在doSomethingWonderful.php我可以得到的环境值:
<?php
echo $_SERVER['ENVIRONMENT_VAR']; # => "production"
我希望这能有所帮助!
对我有用的(基于debian):
创建一个包含所有需要的env变量的文件: # !/bin/bash env | grep VAR1= > /etc/environment . env | grep VAR1= > /etc/environment . env | /etc/environment . env | grep VAR2= >> /etc/environment . env | grep VAR3= >> 然后,通过在调用需要它的脚本之前调用env文件来构建crontab内容,从而启动cron服务 (crontab -l;Echo '* * * * *。/etc/environment;/usr/local/bin/python /mycode.py >> /var/log/cron-1.log 2>&1') | crontab 服务cron启动
注意:对于python用例,一定要调用整个python路径,否则可能会调用错误的python,产生无意义的语法错误