【问题标题】:Why would one include ". ./.profile" in a crontab entry in Unix?为什么要在 Unix 的 crontab 条目中包含“../.profile”?
【发布时间】:2017-11-01 12:29:44
【问题描述】:

我想知道每当我们执行 cron 作业时. ./.profile 的用法。我见过很多包含这个的脚本。问题是,有什么用,不加怎么办?

例子:

00 1-22 * * 1-5 . ./.profile ; /global/u1/sie/rox/Scripts/Calls.ksh >/dev/null 2>&1

【问题讨论】:

标签: linux shell unix cron


【解决方案1】:

. somefile 是符合 POSIX 的等效项,相当于内置的 bash source:在 bash 中运行 source somefile,或在任何符合 POSIX 的 shell 中运行 . somefile,在现有的 shell 中执行该脚本内的每个命令。

关于为什么这在 crontab 中有用:cron 运行在非常小的环境中——它甚至可能没有 PATH 集,并且不太可能有许多其他设施。如果您的脚本依赖于存在的环境变量,则可能需要在 crontab 中指定它们,或者在定义它们的脚本中获取(即在现有 shell 中执行)。

也就是说,我建议不要使用这种成语:

  • .profile 用于登录会话(用户与 shell 实时交互的会话),想要自定义其交互式会话行为的人可能会在不考虑计划作业的情况下进行修改。
  • 通过阅读您的crontab 并不清楚~/.profile 将设置或不会设置哪些环境变量,因此很难推断环境的状态。

相反,您应该在 crontab 顶部设置环境变量

PATH=/bin:/usr/bin:/usr/local/bin
VARNAME=VALUE
# ...etc...

0 1-22 * * 1-5 /global/u1/sie/rox/Scripts/Calls.ksh >/dev/null 2>&1

【讨论】:

  • 我在同一路径上还有 2 个脚本,并且在不使用 . ./.profile 它仍然可以正常工作。如果我不指定,这是一个真正的坏习惯吗? 。/。轮廓??还是完全取决于我们拥有的脚本?你能用简单的话解释一下你的答案吗,因为我是新手。谢谢
  • 简单地说:我建议你根本不要指定. .profile。这是一条捷径,但有更好的方法来完成使用它的人想要完成的事情。
  • 所以换句话说,指定它而不指定它不会影响脚本输出它仍然可以正常工作吗?
  • 这并不完全准确,但要获得严格准确的解释,您应该阅读我的完整答案(并查找/研究您不理解的任何部分)。
  • 再尝试一次简洁的解释:在子进程中执行脚本之前获取.profile 的唯一用途是设置环境变量。环境变量可以影响脚本的运行方式。但是,好的做法是将 crontab 所需的任何环境变量直接放在 crontab 中,而不是来自 .profile
【解决方案2】:

配置文件是 shell 配置文件,您可以向其中添加代码,该代码将在 shell 启动后立即运行,./profile 是 Ksh 和 Bourne 的配置文件,/.bash_profile 是 bash /.login 是对于 Tcsh 和 Csh。 当脚本调用配置文件时,是因为它需要其中的某些内容,即 $path 变量甚至是它可能无法访问的特定命令。在这种情况下,由于 cron 无法访问太多,因为它在最小环境中运行,因此脚本将提取 .profile,因为它依赖于其中的某些内容。

更多信息here

here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-09
    • 1970-01-01
    • 1970-01-01
    • 2013-11-13
    • 2010-12-21
    • 2023-03-23
    相关资源
    最近更新 更多