crontab执行没有执行用户相同的环境variables

我运行我的crontab作业0 2 */1 * * /aScript >aLog.log 2>&1作为'root'用户,但是我发现env与'root'用户的env不同,因此遇到了不同我的脚本的运行时行为。

尝试修复是将导出命令放在rc.d文件中,但仍然没有显示出来! 我最终将导出命令放在aScript本身。

我的问题是,有没有更好的方法来解决这个问题? 以及为什么即使它是从同一个用户的“根”,env丢失? (我通过从根目录运行'crontab -e'来修改crontab)

克朗总是运行一个大部分是空的环境。 HOME,LOGNAME和SHELL被设置; 和一个非常有限的path。 因此build议使用可执行文件的完整path,并在使用cron时导出脚本中需要的任何variables。

有几种方法可以用来在cron中设置你的环境variables,但是它们都可以在你的脚本中设置它。

方法1:

在脚本中手动设置您需要的每个variables。

方法2:

资料来源:

. $HOME/.bash_profile . $HOME/.bash_profile (或. $HOME/.profile

(你通常会发现上面的文件会产生其他的文件(例如〜/ .bashrc – > /etc/bashrc-etc/profile.d/*) – 如果没有的话,你也可以使用这些文件。)

方法3:

将您的环境variables保存到文件(作为所需用户运行):

 env > /path/to/my_env.sh 

然后通过你的cron脚本导入:

 env - `cat /path/to/my_env.sh` /bin/sh 

方法4:

在某些情况下,您可以在/etc/default/cron设置全局cronvariables。 但是这样做有一定的风险,因为这些都是为所有的cron工作设定的。

Cron使用指定的用途创build它的OWN shell。

所以,如果你想保留你的用户的variables,那么就试着用你自己的用户来运行它,而不是root或者其他任何用户。

要么

最好的方法是在你自己的脚本中导出这些variables。

在RedHat CentOS中,您可以将/etc/rc.d/init.d/functions默认PATH设置为永久设置。 /etc/rc.d/crond启动时调用函数。