cwd*_*cwd 145 shell cron environment-variables
如何使用现有环境变量运行 cron 命令?
如果我在 shell 提示符下,我可以输入echo $ORACLE_HOME并获取路径。这是在我的~/.profile. 但是,似乎~/.profile没有从 cron 脚本加载,因此我的脚本失败,因为$ORACLE_HOME未设置变量。
在这个问题中,作者提到创建一个~/.cronfile配置文件,为 cron 设置变量,然后他做了一个解决方法,将他的所有 cron 命令加载到他保存在他~/Cron目录中的脚本中。像~/.cronfile这样的文件听起来是个好主意,但其余的答案似乎有点麻烦,我希望有人能告诉我一种更简单的方法来获得相同的结果。
我想在我的脚本开始时我可以添加类似的东西,source ~/.profile但这似乎是多余的。
那么我怎样才能让我的 cron 脚本从我的交互式 shell 配置文件中加载变量呢?
Arc*_*ege 183
在 crontab 中,在您发出命令之前,添加. $HOME/.profile. 例如:
0 5 * * * . $HOME/.profile; /path/to/command/to/run
Run Code Online (Sandbox Code Playgroud)
Cron对你的外壳一无所知;它是由系统启动的,所以它有一个最小的环境。如果你想要任何东西,你需要自己带进来。
小智 55
我发现另一个更简单的选择是使用 cron 运行脚本并在脚本中设置环境。
在 crontab -e 文件中:
SHELL=/bin/bash
*/1 * * * * $HOME/cron_job.sh
Run Code Online (Sandbox Code Playgroud)
在 cron_job.sh 文件中:
#!/bin/bash
source $HOME/.bash_profile
some_other_cmd
Run Code Online (Sandbox Code Playgroud)
.bash_profile 源之后的任何命令都将拥有您的环境,就像您登录一样。
小智 30
我发现另一个更简单的选择是使用 cron 运行脚本并告诉 bash 登录(因此使用/etc/profile.d/...环境定义)
在crontab -e文件中:
*/1 * * * * bash -l -c './cron_job.sh'
*/1 * * * * bash -l -c 'php -f ./cron_job.php'
Run Code Online (Sandbox Code Playgroud)
source 之后的任何命令都.bash_profile将拥有您的环境,就像您登录一样。
fpm*_*phy 12
问:如何使用现有环境变量运行 cron 命令?
一般做法是在要从 cron 作业运行的脚本中专门设置所有必需的环境变量。
小智 8
这种语法肯定对你有帮助。我不明白语法,但它有效。Oracle 在将 Oracle Configuration Manager 部署到 crontab 时使用此语法,因此,我认为这是一个正确的解决方案。
0 5 * * * SOME_ENV_VAR=some_value some_command some_parameters
Run Code Online (Sandbox Code Playgroud)
        小智 7
您可以将全局环境变量放入/etc/environment. 它们在 crontab 运行程序时加载。前任 :
env | grep ORACLE_HOME >> /etc/environment
service crontab restart
Run Code Online (Sandbox Code Playgroud)
缺点是它不限于单个用户。在CentOS7下测试