【问题标题】:Crontab: access to BASH internal variablescrontab:访问 BASH 内部变量
【发布时间】:2014-01-03 04:59:43
【问题描述】:

如何设置我的 crontab 环境,以便它可以访问内置的 BASH 变量,例如 $HOME、$PWD、$OLDPWD、$USER、$PATH、$PS1 等,所以依赖这些变量的脚本可以在 crontab 环境中运行吗?这是采购一些我不知道的文件的问题,还是事情稍微复杂一些?

【问题讨论】:

    标签: linux bash unix crontab


    【解决方案1】:

    这些变量总是按预期设置:HOME、PWD、USER。

    如果您像这样安排脚本:

    0 0 * * * /path/to/script.sh
    

    脚本的第一行是#!/bin/bash,然后可能它会在运行时获取~/.bashrc,但不是~/.bash_profile~/.profile。除此之外,您提到的变量应该按预期工作。例如,如果您更改脚本中的目录,则 OLDPWDPWD 将被更新。我看不出 PS1 在脚本中的相关性。

    另一方面,如果你想在你的crontab 中安排一个命令并且你想获取.bashrc 的来源,那么你必须这样写:

    0 0 * * * . .bashrc; somecmd
    # or:
    0 0 * * * bash -c somecmd
    

    另外请记住,虽然您可以在 crontab 中设置变量,但它的工作方式与 shell 脚本中的变量不同。例如这些工作:

    SHELL = /bin/bash
    SHELL=/bin/bash
    PATH=~/bin:/usr/bin/:/bin
    

    另一方面,这不会达到您的预期:

    PATH=$HOME/bin:$PATH
    

    正如man 5 crontab 中所解释的,值(= 之后的任何内容)都不会被解析,因此本示例中的$HOME$PATH 将按字面意思理解。

    【讨论】:

      【解决方案2】:

      尝试使用“EasyCronjobHandler”http://codecanyon.net/item/the-easycronjobhandler/6296537

      【讨论】:

        猜你喜欢
        • 2019-10-04
        • 2011-06-15
        • 2017-01-19
        • 2020-06-30
        • 1970-01-01
        • 2015-04-29
        • 2018-03-04
        相关资源
        最近更新 更多