如何使用现有环境变量运行 cron 命令?

如何使用现有环境变量运行 cron 命令?

如何使用现有环境变量运行 cron 命令?

如果我在 shell 提示符下,我可以输入echo $ORACLE_HOME并获取路径。这是我的环境变量之一,在我的~/.profile.但是,似乎~/.profile没有从 cron 脚本加载,因此我的脚本失败,因为$ORACLE_HOME未设置变量。

这个问题作者提到创建一个~/.cronfile为 cron 设置变量的配置文件,然后他采取了一种解决方法,将所有 cron 命令加载到他保存在~/Cron目录中的脚本中。像这样的文件~/.cronfile听起来是个好主意,但答案的其余部分似乎有点麻烦,我希望有人能告诉我一种更简单的方法来获得相同的结果。

我想在我的脚本开始时我可以添加类似的内容,source ~/.profile但这似乎可能是多余的。

那么我怎样才能让我的 cron 脚本从我的交互式 shell 配置文件加载变量呢?

答案1

在 crontab 中,在执行命令之前,添加. $HOME/.profile.例如:

0 5 * * * . $HOME/.profile; /path/to/command/to/run

Cron对你的 shell 一无所知;它是由系统启动的,所以它有一个最小的环境。如果你想要什么,你需要自己带进来。

答案2

我发现更容易的另一个选择是使用 cron 运行脚本并在脚本中包含环境。

在 crontab -e 文件中:

SHELL=/bin/bash

*/1 * * * * $HOME/cron_job.sh

在 cron_job.sh 文件中:

#!/bin/bash
source $HOME/.bash_profile
some_other_cmd

.bash_profile 源之后的任何命令都将具有您的环境,就像您登录一样。

答案3

我发现更简单的另一个选择是使用 cron 运行脚本并告诉 bash 登录(因此使用/etc/profile.d/...环境定义)

crontab -e文件中:

*/1 * * * * bash -l -c './cron_job.sh'
*/1 * * * * bash -l -c 'php -f ./cron_job.php'

源之后的任何命令.bash_profile都将具有您的环境,就像您登录一样。

答案4

这个语法绝对对你有帮助。我不明白语法,但它有效。 Oracle 在将 Oracle Configuration Manager 部署到 crontab 时使用此语法,因此,我相信这是一个正确的解决方案。

0 5 * * * SOME_ENV_VAR=some_value some_command some_parameters

相关内容