【发布时间】: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”运行时,“环境”是罪魁祸首。