【问题标题】:Script can't find library when run as cron job, works fine when run manually脚本作为 cron 作业运行时找不到库,手动运行时工作正常
【发布时间】:2018-08-29 01:24:06
【问题描述】:

我正在 cronjob 中创建下面的脚本。它是手动生成的。但是,当在 cron 中时,它无法生成文件。

下面是我的 unix cron 脚本。

#!/usr/local/bin/bash
var=`perl -w -e '$d=1*86400;@t=localtime (time -$d); printf "%.2d%.2d%.2d", $t[5]+1900,$t[4]+1,$t[3];'`

var="`echo $var |cut -c3-8`"

i=1;

while [ $i -le 8 ]
do

    cd /home/svfe/bin
    ./bills_unloader -d $var -f $i
    i=`expr $i + 1`
done

echo "Done !

当我尝试调试脚本时,我发现以下错误。

/usr/lib/hpux64/dld.so:找不到库“libclntsh.so.11.1”。 /home/swa/swa2/autoload/bills_unloader.sh:第 19 行:7078 被杀
./bills_unloader -d 170606 -f $i

为什么命令在 cron 中失败,但手动执行时工作正常?

【问题讨论】:

  • 你看到crontab tag wiki中的优秀调试建议了吗?
  • @BenjaminW。看起来这个调试建议,怎么说呢,现在有点递归。
  • @ArturR.Czechowski 真可惜。 crontab 标签 wiki 是一个出色的调试指南,但它现在与“cron”同义。显然,自 1 月 16 日以来,这很奇怪——我敢肯定,我最近看过调试指南。
  • 这里是archived tag wiki
  • @BenjaminW。我刚刚在 meta 上询问是否可以恢复丢失的 wiki:meta.stackoverflow.com/questions/350576/…

标签: shell unix cron hp-ux


【解决方案1】:

很可能您在 CLI 环境中设置了 LD_LIBRARY_PATH 变量,但是当脚本在 cron 下运行时它不可用。添加一行:

declare -x > /tmp/variables.log.$(date +%s).$$

在脚本的开头,比较手动运行和 cron 运行的日志。如有必要,请在脚本中正确设置 LD_LIBRARY_PATH

因为它是一个 hpux 系统,它也可以是SHLIB_PATH

【讨论】:

    【解决方案2】:

    您可能正在对另一个用户使用命令,而对另一个用户使用 crontab。 假设您的命令与用户“xyz”一起工作正常,请在您的 crontab 条目中尝试以下命令 - su - xyz -c sh

    【讨论】:

      猜你喜欢
      • 2017-03-09
      • 2017-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-16
      • 2011-05-10
      相关资源
      最近更新 更多