我有一个crontab每小时运行一次。运行它的用户在.bash_profile中有环境变量,当用户从终端运行作业时,这些环境变量是有效的,然而,显然这些环境变量在crontab运行时不会被拾取。
我已经尝试在.profile和.bashrc中设置它们,但它们似乎仍然没有被拾取。有人知道我可以把crontab可以获取的环境变量放在哪里吗?
我有一个crontab每小时运行一次。运行它的用户在.bash_profile中有环境变量,当用户从终端运行作业时,这些环境变量是有效的,然而,显然这些环境变量在crontab运行时不会被拾取。
我已经尝试在.profile和.bashrc中设置它们,但它们似乎仍然没有被拾取。有人知道我可以把crontab可以获取的环境变量放在哪里吗?
当前回答
对于我来说,我必须为php应用程序设置环境变量。我通过向crontab添加以下代码来解决这个问题。
$ sudo crontab -e
定时任务:
ENVIRONMENT_VAR=production
* * * * * /home/deploy/my_app/cron/cron.doSomethingWonderful.php
在doSomethingWonderful.php我可以得到的环境值:
<?php
echo $_SERVER['ENVIRONMENT_VAR']; # => "production"
我希望这能有所帮助!
其他回答
在/etc/environment中设置变量在Ubuntu中也适用。从12.04开始,/etc/environment中的变量将为cron加载。
对于这个问题,我还有一个解决方案:
0 5 * * * . $HOME/.profile; /path/to/command/to/run
在这种情况下,它将选择$HOME/中定义的所有环境变量。概要文件。
当然$HOME也没有设置,你必须用$HOME的完整路径替换它。
全局设置env
sudo sh -c "echo MY_GLOBAL_ENV_TO_MY_CURRENT_DIR=$(pwd)" >> /etc/environment"
添加计划作业以启动脚本
crontab -e
*/5 * * * * sh -c "$MY_GLOBAL_ENV_TO_MY_CURRENT_DIR/start.sh"
=)
对于我来说,我必须为php应用程序设置环境变量。我通过向crontab添加以下代码来解决这个问题。
$ sudo crontab -e
定时任务:
ENVIRONMENT_VAR=production
* * * * * /home/deploy/my_app/cron/cron.doSomethingWonderful.php
在doSomethingWonderful.php我可以得到的环境值:
<?php
echo $_SERVER['ENVIRONMENT_VAR']; # => "production"
我希望这能有所帮助!
从命令行运行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"