【问题标题】:Sed command within script not working when script called from cron当从 cron 调用脚本时,脚本中的 Sed 命令不起作用
【发布时间】:2014-04-18 23:26:22
【问题描述】:

我已经为这个问题苦苦挣扎了一段时间。我有一个脚本,其中有以下 sed 命令:

DEF_CTLFILE1=$FDF_TOP/programs/sw_ctrl.ctl

sed "s/process_group_to_be_replaced_here/$PROCESS_GROUP/g" \
    ${DEF_CTLFILE1} > ${fname1}.ctl

当我允许 cron 作业执行脚本时,将生成输出 (fname1.ctl),但大小为 0。

请注意,我确保这两个文件在变量定义 (fname1) 中包含绝对路径。

当我手动执行脚本时,它工作得很好。我想我需要更多地了解 cron 作业、权限和可见性,但我才刚刚开始。任何和所有提示将不胜感激。

我的 Linux 版本是 Linux 2.6.18-348.6.1.0.1.el5 x86_64,Red Hat Linux 5.9 这是一个 ksh 脚本。

【问题讨论】:

  • 很有可能您的问题是您的 cron-job 运行的环境。从您的代码来看,很可能$FDF_TOP 没有在cron 环境中设置;它很可能是在您的环境中设置的。如果我是对的,有很多问题是重复的(例如Perl script works but not via cron)。
  • 您好乔纳森,感谢您的回复。脚本中的所有变量在适用的情况下都提供了它们的绝对路径。此外,我确保在运行我的 cron 作业的环境中定义的路径具有 ${DEF_CTLFILE1} 所在目录的路径。
  • 所以你的 cron-run 脚本包含 FDF_TOP=/some/absolute/path 作为你没有显示的一行?当作业由 cron 运行时,它几乎没有环境。如果您想查看什么环境,请将env > /tmp/cron.env.$$ 作为 cron 作业的命令运行。检查输出。现在你知道为什么你有问题了。除非你明确设置FDF_TOP,否则不会设置。
  • FDF_TOP 在脚本中设置:FDF_TOP=/$VAH/app/streamw VAH 是一个环境变量。所以即使它没有设置,为什么它会产生一个输出文件但那个文件只是空的?非常感谢您的参与。我很感激。
  • 空文件可能是创建的,因为 (1) $VAH 没有设置,并且 (2) /app/streamw/programs/sw_ctrl.ctl 不存在,所以 (3) sed 命令失败,但是 ( 4) 创建空文件的 I/O 重定向在sed 命令失败之前完成。至少 95%,可能接近 99%,当“命令从命令行运行而不是从 cron”运行时,“环境”是罪魁祸首。

标签: linux shell sed cron ksh


【解决方案1】:

感谢您的两位回复。所以在 sed 命令之前,$PROCESS_GROUP 实际上是从 SQL 调用 sqlplus 派生的。这个调用被包装在一个函数中。

由于某种原因,当它被包装在一个函数中并且 cron 作业运行脚本时,PROCESS_GROUP 变量被损坏了。它将有两行数据,因此会用错误来处理 sed 命令

sed: -e 表达式 #1, char 41: unterminateds'`。

我最终重构了整个脚本(例如从函数中删除 SQL 调用),它最终工作了

【讨论】:

    【解决方案2】:

    OP 自己的解决方案的占位符,将其标记为已解决。

    感谢您的两位回复。所以在 sed 命令之前,$PROCESS_GROUP 实际上是 派生自 SQL 调用 sqlplus。这个调用被包装在一个函数中。

    由于某种原因,当它被包装在一个函数中并且 cron 作业运行脚本时, PROCESS_GROUP 变量已损坏。它将有两行数据和 因此用错误来处理 sed 命令

    sed: -e expression #1, char 41: unterminateds'`。

    我最终重构了整个脚本(例如从函数中删除 SQL 调用) 它最终终于奏效了。 – joshuafrostByte 3 月 25 日 18:14

    【讨论】:

      猜你喜欢
      • 2014-10-12
      • 2013-12-04
      • 2014-05-23
      • 2017-03-05
      • 1970-01-01
      • 1970-01-01
      • 2016-09-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多