【发布时间】:2014-01-03 04:59:43
【问题描述】:
如何设置我的 crontab 环境,以便它可以访问内置的 BASH 变量,例如 $HOME、$PWD、$OLDPWD、$USER、$PATH、$PS1 等,所以依赖这些变量的脚本可以在 crontab 环境中运行吗?这是采购一些我不知道的文件的问题,还是事情稍微复杂一些?
【问题讨论】:
如何设置我的 crontab 环境,以便它可以访问内置的 BASH 变量,例如 $HOME、$PWD、$OLDPWD、$USER、$PATH、$PS1 等,所以依赖这些变量的脚本可以在 crontab 环境中运行吗?这是采购一些我不知道的文件的问题,还是事情稍微复杂一些?
【问题讨论】:
这些变量总是按预期设置:HOME、PWD、USER。
如果您像这样安排脚本:
0 0 * * * /path/to/script.sh
脚本的第一行是#!/bin/bash,然后可能它会在运行时获取~/.bashrc,但不是~/.bash_profile 或~/.profile。除此之外,您提到的变量应该按预期工作。例如,如果您更改脚本中的目录,则 OLDPWD 和 PWD 将被更新。我看不出 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 将按字面意思理解。
【讨论】:
尝试使用“EasyCronjobHandler”http://codecanyon.net/item/the-easycronjobhandler/6296537
【讨论】: