我0 2 */1 * * /aScript >aLog.log 2>&1
以“ root”用户身份运行crontab作业,但是我发现env与“ root”用户的env不同,因此我的脚本遇到了不同的运行时行为。
尝试解决的问题是将导出命令放置在rc.d文件中,但仍然没有显示!我最终将导出命令放在aScript本身中。
我的问题是,有没有更好的方法来解决这个问题?以及为什么env丢失了,即使它来自同一用户“ root”?(我通过从根目录运行'crontab -e'来修改crontab)
我0 2 */1 * * /aScript >aLog.log 2>&1
以“ root”用户身份运行crontab作业,但是我发现env与“ root”用户的env不同,因此我的脚本遇到了不同的运行时行为。
尝试解决的问题是将导出命令放置在rc.d文件中,但仍然没有显示!我最终将导出命令放在aScript本身中。
我的问题是,有没有更好的方法来解决这个问题?以及为什么env丢失了,即使它来自同一用户“ root”?(我通过从根目录运行'crontab -e'来修改crontab)
Answers:
Cron始终在几乎是空的环境下运行。HOME,LOGNAME和SHELL已设置;和非常有限的路径。因此,建议使用完整的可执行文件路径,并在使用cron时导出脚本中所需的任何变量。
您可以使用多种方法在cron中设置环境变量,但是所有这些都等于在脚本中进行设置。
方法1:
在脚本中手动设置所需的每个变量。
方法二:
来源您的个人资料:
. $HOME/.bash_profile
(或. $HOME/.profile
)
(您通常会发现上面的文件还将提供其他文件的来源(例如〜/ .bashrc-> / etc / bashrc-> /etc/profile.d/*)-如果没有,您也可以提供这些文件。)
方法3:
将环境变量保存到文件中(以所需用户身份运行):
env > /path/to/my_env.sh
然后通过您的cron脚本导入:
env - `cat /path/to/my_env.sh` /bin/sh
方法4:
在某些情况下,您可以在中设置全局cron变量/etc/default/cron
。但是,这样做存在风险,因为将为所有Cron作业设置这些。
bash: SHELL=/bin/bash: No such file
source
(bash)配置文件。